一、PWR简介
- PWR(Power Control)电源控制
- PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能
- 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
- 低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间
二、基本结构与模式
2.1 基本结构
- V D D A V_{DDA} VDDA供电区域:模拟供电
- V D D , 1.8 V V_{DD},1.8V VDD,1.8V供电区域:数字供电
- 后备供电区域:常规电源下电时维持供电
2.2 可编程电压监测器
略
2.3 低功耗模式
- 三种模式从上到下,关闭的电路越多,唤醒要求越高,越省电(睡得越深)
- 具体模式选择图:
睡眠模式 - STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行。
- SLEEPONEXIT位决定是立刻进入睡眠模式,还是等当前中断函数退出后进入睡眠。
- 在睡眠模式下,所有的I/O引脚都维持原状。
- WFI进入睡眠模式,可被任意一个NVIC响应的中断唤醒。
- WFE进入睡眠模式,可被唤醒事件唤醒。
停止模式
- 与睡眠模式相同,从停止模式唤醒后,程序从暂停的地方继续运行。
- 1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来。
- 所有的I/O引脚都维持原状。
- 当一个中断或唤醒事件导致退出停止模式时,默认HSI被选为系统时钟。
- 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时。
- WFI/WFE进入停止模式,只能被EXTI的中断/事件唤醒。
待机模式
- 与前两者不同,从待机模式唤醒后,程序从头运行。
- 整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电。
- 所有的I/O引脚变为高阻态(浮空输入)。
- 待机模式唤醒条件:WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位
三、低功耗模式配置
'进入睡眠模式(任一中断唤醒)'
__WFI();
'进入停止模式(EXTI中断唤醒)'
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 开启PWR时钟
PWR_EnterSTOPMode(PWR_Regulator_ON, WFI); // 进入停止模式,电压调节器开启,中断唤醒
// 注意!退出停止模式后,系统时钟会默认变为HSI
'进入待机模式(WKUP唤醒)'
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 开启PWR时钟
PWR_WakeUpPinCmd(ENABLE); // 使能WKUP唤醒,不需要GPIO初始化
PWR_EnterSTANDBYMode(); // 进入待机模式
四、常用库函数
__WFI(); // WFI指令,中断唤醒
__WFE(); // WFE指令,事件唤醒
void PWR_DeInit(void);
// 复位函数
void PWR_BackupAccessCmd(FunctionalState NewState);
// 使能后备区域访问,用于RTC/BKP
void PWR_WakeUpPinCmd(FunctionalState NewState);
// 使能WKUP引脚(PA0),用于唤醒待机模式
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);
// 清除标志位
// 以下两个函数为电压监测器相关函数
void PWR_PVDCmd(FunctionalState NewState);
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);
五、补充
无文章来源:https://www.toymoban.com/news/detail-830975.html
Reference
STM32入门教程-2023版(江科大)文章来源地址https://www.toymoban.com/news/detail-830975.html
到了这里,关于PWR_STM32的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!