Цитата(Baser @ Apr 17 2018, 16:14)

Может ли быть сваливание в HardFault, если я пытаюсь читать какой-нибудь регистр периферии, на который не подано тактирование?
Не должно, в доках пишут, что при этом будут читаться нули.
А проблема с HardFault была из-за моей ошибки - забыл инициализировать один указатель...
Обнаружил несколько вещей в режиме Standby, не описанных в документации.
Exit from Standby по разным источникам происходит совершенно по-разному.
1. Если это просыпание по срабатыванию IWDG, то происходит нормальный System reset с дерганием ножки NRST, очисткой всех регистров, кроме RTC, выключением IWDG и LSI. Просыпание проходит с ожиданием готовности 3ms внутренней опоры Vrefint, независимо от установки бита Fast Wake-Up (FWU) и выключения BOR в Option byte.
2. Если это просыпание по срабатыванию RTC Wakeup Timer, то ножка NRST не дергается, генератор LSI не выключается и просыпание происходит быстро, если установлен бит Fast Wake-Up (FWU).
IWDG, если был включен раньше, продолжает работать с прежним делителем. IWDG можно пересбросить или не трогать, и он тогда может досчитать до нуля и сбросить МК как в первом случае.
Цифры токов потребления удалось "найти" путем замены вольтметра на другой. Оказалось, что мой бессовестно привирал при измерении в положительную сторону. А в отрицательную сторону измерял нормально.
В результате для STM32L151RC получил цифры, которые практически равны типовым значениям из документации.
Везде применялось: VDD=3.0V, ULP=1, FWU=1, LSE=32kHz
Код
В скобках значения из документации (Typ/Max)
0.3 mkA - все выключено (0.29/0.6 mkA)
1.0 mkA - IWDG + LSI (1.0/1.7 mkA)
1.1 mkA - RTC + LSI, LSE=Off (1.15/1.9 mkA)
1.4 mkA - RTC + LSE, LSI=Off (1.3/--- mkA)
2.0 mkA - RTC + LSE, LSI=ON
2.1 mkA - RTC + LSE, IWDG + LSI
4.4 mkA - RTC + LSE, IWDG + LSI, Vrefint=ON (ULP=0, FWU=0)
Режим с IWDG в документации вообще не отражен, видимо посчитали, что его никто применять не будет.
А я как раз хочу его применить в приборах с "параноидальным" тройным дублированием просыпания. Там, где нет возможности обеспечить доступ к резервной кнопке Reset. При токе 2.1 мкА и периодическим просыпанием по RTC Wakeup Timer каждые 10 сек батарейка CR2032 должна продержаться 10 лет.
А дополнительно включенный в спячке IWDG с периодом в 30 сек должен обеспечить дополнительную защиту от вечного сна при сбое всех источников просыпания.