PWR_STM32

一、PWR简介

  • PWR(Power Control)电源控制
  • PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器低功耗模式的功能
  • 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
  • 低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

二、基本结构与模式

2.1 基本结构

PWR_STM32_第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 低功耗模式

PWR_STM32_第2张图片

  • 三种模式从上到下,关闭的电路越多,唤醒要求越高,越省电(睡得越深
  • 具体模式选择图:
    PWR_STM32_第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);

五、补充


Reference
STM32入门教程-2023版(江科大)

你可能感兴趣的:(stm32,单片机,嵌入式硬件)