Application Note: AN2629
- 博客:
low power mode in stm32
- 修改
LOW_POWER_MODE
宏定义为指定低功耗模式,然后编译烧录即可;
- 可通过任意中断唤醒,所以通过按键,串口接收中断等方式都可以;也可以通过唤醒事件唤醒;(外部触发的叫中断,内部触发的叫事件)
- 因为
sysTick
中断也会唤醒sleep mode
,而sysTick
默认每毫秒都产生一次中断,所以为了避免被这个中断唤醒,进入sleep
前需要关闭sysTick
;- 由于进入
sleep
关闭了sysTick
,所以唤醒sleep
后需要重启sysTick
;- 配置
HAL_PWR_EnableSleepOnExit()
进入sleep
后,每次唤醒后都只执行中断中的代码,执行完后自动进入sleep
;除非在中断中通过HAL_PWR_DisableSleepOnExit
退出;- 在
Sleep
模式下,MCU
不再工作,外设可以工作,串口依旧是可以打印的;寄存器和RAM
保存;
- 可通过任意
EXTI
中断唤醒,注意和Sleep
的区别,串口中断可以唤醒Sleep
,但是不能唤醒Stop
;Stop
模式下,HSE
关闭,所以唤醒后,需要调用SystemClock_Config()
重新配置系统时钟;- 同理,进入、退出
Stop mode
也需要关闭、开启sysTick
;Stop mode
也可以使用HAL_PWR_EnableSleepOnExit()
;Stop
模式下,MCU
不再工作,串口不能打印;寄存器和RAM
的数据保存;
Standby mode
和前面两个不一样,前面两个低功耗模式被唤醒后,可以接着在进入低功耗模式的地方运行,而Standby
唤醒后会复位MCU
,只能通过PWR_FLAG_SB
状态位判断是正常的复位重启还是由于唤醒Standby
产生的复位重启;Standby
可以被WKUP
管脚,RTC alarm
,NRST
管脚,IWDG reset
唤醒;- 除了备份寄存器,其他寄存器和
RAM
的值将丢失,所以唤醒后必须要重启!