目录
简介:
电源框图:
低功耗模式:
模式选择:
睡眠模式:
停止模式:
待机模式:
简介:
- PWR(Power Control)电源控制
- PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能
- 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
- 低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间
电源框图:
低功耗模式:
停机和待机模式的区分:PDDS位。PDDS = 0,停机模式。PDDS = 1,待机模式。
停机状态下的LPDS用于调节电压调节器是处于开启状态(LPDS = 0)还是低功耗状态(LPDS = 1)
睡眠模式:只关闭CPU,不关闭其他的外设
停机模式:关闭CPU和外设,电压调节器设置为开启或低功耗(储存数据)
待机模式:关闭CPU,外设和电压调节器。
模式选择:
睡眠模式:
- 执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
- SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠
- 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态
- WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
- WFE指令进入睡眠模式,可被唤醒事件唤醒
停止模式:
- 执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
- 1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来
- 在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态
- 当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟.(我们的程序是默认systemInit里面的配置,是使用的HSE外部高速时钟,通过PLL倍频,得到72MHz主频。但是进入停止模式后,PLL和HSE都停止了。而且在退出停止模式时他不会在主动开启PLL和HSE。而是默认使用HSI的8MHz直接作为主频。所以在推出停止模式后要开启HSE,配置主频为72MHz)
- 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时
- WFI指令进入停止模式,可被任意一个EXTI中断唤醒
- WFE指令进入停止模式,可被任意一个EXTI事件唤醒
待机模式:
- 执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行
- 整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电
- 在待机模式下,所有的I/O引脚变为高阻态(浮空输入)
- WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式
PWR库函数:
//将寄存器复位默认值 void PWR_DeInit(void); //使能后备区域的访问 void PWR_BackupAccessCmd(FunctionalState NewState); //使能PVD void PWR_PVDCmd(FunctionalState NewState); //配置PVD的阈值电压 void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); //使能位于PA0位置的Wakeup引脚 void PWR_WakeUpPinCmd(FunctionalState NewState); //进入停止模式 void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); //进入待机模式 void PWR_EnterSTANDBYMode(void); //获取标志位 FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); //清除标志位 void PWR_ClearFlag(uint32_t PWR_FLAG);