STM32物联网项目-低功耗模式
低功耗模式 电源框图VDD供电区域一般为2V ~ 3.6V,经过电压调节器可降压到1.8V给CPU核心、存储器和内置数字外设供电,为了降低CPU的功耗,后备供电区域可由电池供电,输入引脚为VBAT
STM32各种电源
STM32的低功耗模式
STM32F10xxx有三种低功耗模式:
睡眠模式:Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行
停止模式:所有的时钟都已停止 待机模式:1.8V电源关闭 模式从上到下功耗越低,但唤醒条件越严格 此外,在运行模式下,可以通过以下方式中的一种降低功耗:
降低系统时钟。时钟频率越慢功耗越低,例如平时使用芯片时的系统时钟频率都是72MHz,这能满足绝大部分外设的要求,但如果是点个流水灯,又想要低功耗,就没必要使用72MHz的,用8M或者更低能运行的话就用低点的, 关闭APB和AHB总线上未被使用的外设时钟。 低功耗模式下的自动唤醒(AWU)
低功耗模式下的自动唤醒(AWU)在STM32F1是没有的,在F4是有的,但F1可以通过RTC闹钟事件来唤醒 如下面STM32F4的RTC框图,就有16位的唤醒自动重载寄存器,可以通过设定值来唤醒
实验目标
触摸按键1被按下,则系统进入睡眠模式,点击触摸按键4退出睡眠模式;
触摸按键2被按下,则系统进入停止模式,点击触摸按键4退出停机模式;
触摸按键3被按下,则进入待机模式,通过复位按键退出待机模式; CubeMX配置
按键外部中断的配置,LED灯作系统的指示作用,拉低WIFI模块的使能脚,不然模块会耗电 初始化串口1,用于打印信息
程序
stm32f1xx_hal_pwr.h
下面是进入低功耗模式的三个HAL库函数,可以直接调用 /* Low Power modes configuration functions ************************************/
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry); //进入停止模式
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry); //进入睡眠模式
void HAL_PWR_EnterSTANDBYMode(void); //进入停机模式
进入或退出睡眠模式
以WFI进入睡眠模式后,是可以通过任意一个中断来唤醒的,这里就需要注意了,平时使用的延时函数HAL_Delay()是以SysTick滴答定时器来作为时基的,并且NVIC中默认已经开启了SysTick的中断,如果直接在主函数中调用HAL_PWR_EnterSLEEPMode函数进入睡眠模式的话,SysTick滴答定时器的中断就会立马唤醒系统,达不到低功耗的效果;所以在进入睡眠模式之前,需要先关闭SysTick的中断 同理,系统中开启的用户中断也要关闭,如定时器,外部中断等,可以留某些中断用于退出睡眠模式