这一章在干嘛?

低功耗实验:睡眠 / 停止 / 待机三种模式、WKUP 引脚唤醒、PVD 电压监控、各模式功耗对比。从一粒纽扣电池续航到 1 年。

24.1 电源控制(PWR)简介

24.2 PVD 电压监控实验

24.3 睡眠模式实验

24.4 停止模式实验

24.5 待机模式实验

24.1 电源控制(PWR)简介

STM32F4 三种低功耗模式:

模式内核外设典型功耗唤醒源
睡眠~10 mA任意中断
停止~20 µAEXTI / RTC / WKUP
待机断电断电~2 µAWKUP / RTC / NRST

原书图 24.1.1:三种低功耗模式转换图原书图 24.1.1:三种低功耗模式转换图

睡眠 = CPU 停但 SRAM/外设都还在,最快唤醒;停止 = 全部 1.2V 域停,SRAM 保留;待机 = 1.2V 域也停,SRAM 全丢,相当于软复位。

24.2 PVD 电压监控实验

PVD(Programmable Voltage Detector)监测 VDD 电压,低于阈值触发中断。

配置:PLS[2:0] 选择阈值(2.0~2.9 V)→ 使能 PVD → 中断里报警。

原书图 24.2.1:PVD 阈值与触发原书图 24.2.1:PVD 阈值与触发

24.3 睡眠模式实验

WFI / WFE 指令进入睡眠:

HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

任何中断都能唤醒。

原书图 24.3.1:睡眠模式唤醒时序原书图 24.3.1:睡眠模式唤醒时序

24.4 停止模式实验

停止模式下电压调节器可设为「低功耗模式」进一步省电:

HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);

// 唤醒后要重新配置时钟
SystemClock_Config();

唤醒源:EXTI + RTC 闹钟。

原书图 24.4.1:停止模式唤醒时序原书图 24.4.1:停止模式唤醒时序

24.5 待机模式实验

待机模式下 SRAM 全部丢失,相当于软复位:

HAL_PWR_EnterSTANDBYMode();   // 不会返回

唤醒后从 main 开始。唤醒源:WKUP 引脚上升沿 / RTC 闹钟。

待机唤醒后程序重跑,所以要在 main 开头判断 __HAL_PWR_GET_FLAG(PWR_FLAG_SB) 区分冷启动和唤醒。