Перейти к содержанию

Режим Stop

Из режима Stop микроконтроллер STM32 просыпается и продолжает программу с той же строки: ОЗУ и регистры сохранены. Но у STM32F1 и STM32F4 тактирование при этом сбрасывается на внутренний генератор HSI, и прошивка, не знающая об этом, после первого же сна начинает работать в несколько раз медленнее.

Обновлено Редакция GAW

Режим Stop — режим низкого потребления микроконтроллеров STM32, основанный на глубоком сне ядра Cortex-M (deepsleep) и отключении тактирования периферии. Все такты домена 1,2 В остановлены, PLL, HSI и HSE выключены, но содержимое SRAM и регистров сохраняется (RM0090, разд. 5.3.4). Он глубже обычного режима сна и мельче, чем Standby. Ниже разобраны STM32F4 и STM32F1 — у новых серий вроде STM32L4, U5 и WBA режимов Stop несколько, а источник такта после пробуждения выбирается (MSI или HSI16, бит STOPWUCK в RCC_CFGR у L4), поэтому подробности берут из справочного руководства своей серии.

Вход и выход

ДействиеУсловие у STM32F4
ВходWFI или WFE при SLEEPDEEP = 1 в регистре SCR ядра и PDDS = 0 в PWR_CR
Подготовкасброшены флаги ожидания EXTI, прерываний периферии и RTC
Выход после WFIлюбая линия EXTI в режиме прерывания
Выход после WFEлиния EXTI в режиме события
Такт после выходаHSI (STM32F4 и STM32F1)

Источник: RM0090, табл. 28. Пробуждают микроконтроллер внешние выводы и периферия, у которой есть линия EXTI, например будильник RTC.

Что продолжает работать

В Stop можно оставить включёнными независимый сторожевой таймер IWDG, часы RTC, генераторы LSI и LSE. IWDG после запуска не останавливается ничем, кроме сброса, — его период должен быть больше времени сна, иначе микроконтроллер будет перезагружаться. АЦП и ЦАП продолжают потреблять ток, если их не выключить битами ADON и ENx перед входом.

Режимы стабилизатора

ВариантLPDSFPDSВремя пробуждения
STOP MR00запуск HSI
STOP MR-FPD01+ выход флеш-памяти из power-down
STOP LP10+ выход стабилизатора из LP
STOP LP-FPD11обе задержки

По табл. 27 RM0090 для STM32F405/407. Чем глубже режим, тем меньше ток и тем дольше пробуждение. Конкретные токи и времена приведены в даташите на кристалл.

Подводные камни

  • Тактирование. У STM32F4 и STM32F1 после выхода из Stop система работает от HSI (RM0090, разд. 5.3.4; RM0008, разд. 5.3.4), а PLL и HSE выключены. Их включают заново.
  • Отладка. В Stop ядро не тактируется, и отладчик по умолчанию теряет связь. Для отладки сна в регистре DBGMCU_CR есть биты, сохраняющие такты отладчика.
  • Внешний генератор. Если источник HSE может пропасть во время сна, ST советует заранее перейти на HSI или включить систему контроля тактов CSS.

Семейство STM32F4 и его тактирование описаны в обзоре STM32F4.

Частые вопросы

Почему после выхода из Stop программа работает медленнее?

У STM32F4 и STM32F1 при выходе из Stop системным тактом становится HSI — у STM32F4 это 16 МГц, — а PLL и HSE остаются выключенными (RM0090, разд. 5.3.4). Если перед сном ядро работало от PLL на 168 МГц, сразу после пробуждения нужно снова включить HSE, дождаться PLL и переключить на него SYSCLK — обычно той же функцией, что настраивает такты при старте.

Почему микроконтроллер не засыпает в Stop, а сразу продолжает работу?

Скорее всего, висит флаг ожидания. По RM0090 (табл. 28) все флаги ожидания EXTI, флаги прерываний периферии и флаги RTC — будильников, пробуждения, tamper и метки времени — должны быть сброшены, иначе процедура входа игнорируется и программа идёт дальше. Ещё одна причина — прерывание, ожидающее обработки при WFI.

Чем Stop отличается от Standby?

В Stop ОЗУ и регистры сохраняются, и программа после пробуждения продолжается со следующей команды. В Standby домен 1,2 В обесточен, содержимое SRAM и регистров теряется, кроме резервного домена, а выход из Standby проходит как сброс. Зато Standby даёт наименьший ток.

Источники

  1. STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439, Rev 21 — разд. 5.3.4: Stop основан на режиме deepsleep ядра и отключении тактирования периферии; все такты домена 1,2 В остановлены, PLL, HSI и HSE выключены, содержимое SRAM и регистров сохраняется; стабилизатор в обычном или малопотребляющем режиме (бит LPDS), флеш-память может уйти в power-down (бит FPDS); табл. 27: время пробуждения — запуск HSI плюс выход флеш-памяти из power-down и стабилизатора из LP; табл. 28: вход по WFI или WFE при SLEEPDEEP = 1 и PDDS = 0, выход — любая линия EXTI в режиме прерывания (после WFI) или события (после WFE); все флаги ожидания EXTI, периферии и RTC должны быть сброшены, иначе вход игнорируется; IWDG после запуска не остановить; АЦП и ЦАП потребляют, если их не выключить (ADON = 0, ENx = 0); при выходе системным тактом выбирается HSI; разд. 5.3.7: по умолчанию в Stop и Standby связь с отладчиком теряется, сохраняют её биты DBGMCU_CR; разд. 7.2: HSI — внутренний RC-генератор 16 МГц
  2. STMicroelectronics. RM0008 Reference manual STM32F101/102/103/105/107, Rev 21 — разд. 5.3.4: при выходе из Stop по прерыванию или событию системным тактом выбирается генератор HSI
  3. Arm. Cortex-M4 Devices Generic User Guide, ARM DUI 0553B (ID012616) — разд. 2.5: команды WFI и WFE, бит SLEEPDEEP регистра SCR выбирает глубокий сон, бит SLEEPONEXIT — уход в сон при возврате из обработчика

Нашли ошибку?