这一章在干嘛?
低功耗实验:睡眠 / 停止 / 待机三种模式、WKUP 引脚唤醒、PVD 电压监控、各模式功耗对比。从一粒纽扣电池续航到 1 年。
24.1 电源控制(PWR)简介
STM32F4 三种低功耗模式:
| 模式 | 内核 | 外设 | 典型功耗 | 唤醒源 |
|---|---|---|---|---|
| 睡眠 | 停 | 开 | ~10 mA | 任意中断 |
| 停止 | 停 | 停 | ~20 µA | EXTI / RTC / WKUP |
| 待机 | 断电 | 断电 | ~2 µA | WKUP / RTC / NRST |
原书图 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.3 睡眠模式实验
WFI / WFE 指令进入睡眠:
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
任何中断都能唤醒。
原书图 24.3.1:睡眠模式唤醒时序
24.4 停止模式实验
停止模式下电压调节器可设为「低功耗模式」进一步省电:
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
// 唤醒后要重新配置时钟
SystemClock_Config();
唤醒源:EXTI + RTC 闹钟。
原书图 24.4.1:停止模式唤醒时序
24.5 待机模式实验
待机模式下 SRAM 全部丢失,相当于软复位:
HAL_PWR_EnterSTANDBYMode(); // 不会返回
唤醒后从 main 开始。唤醒源:WKUP 引脚上升沿 / RTC 闹钟。
待机唤醒后程序重跑,所以要在 main 开头判断 __HAL_PWR_GET_FLAG(PWR_FLAG_SB) 区分冷启动和唤醒。
睡眠、停止、待机三种模式功耗排序?
睡眠 > 停止 > 待机。
待机模式唤醒后程序从哪里开始?
从 main 开头,相当于复位。
PVD 是什么?检测什么的?
可编程电压检测器,检测 VDD 电压低于阈值时触发中断。