没志青年
发布于 2025-07-27 / 54 阅读
0

32单片机 - 电源管理与低功耗

对于使用电池供电的电子设备,因电池容量较小,因此很有必要控制功耗,延长设备的使用时间。

必须开启 PWR 时钟,否则电源模式、电压调节器、RTC等关键功能不能使用。

标准库、HAL库中会默认开启的吗???

单片机耗电量

查看数据手册。

电源系统结构

电压调节器:

  • 在正常模式下,将3.3V降压至1.8V,供内核、外设等使用。

  • 在停止模式下,可进入低功耗模式,进一步降低静态功耗。(某些型号在低功耗稳下仅保留部分RAM??

  • 当主电源掉电时,切换到备用电池供电。

可编程电压监测器 PVD

监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务。

低功耗模式

STM32 有三种低功耗模式:

功耗

进入方法

唤醒条件

1.8V区域的影响

VDD区域的影响

电压调节器

内存保留

说明

睡眠(Sleep)

WFI:__WFI();

WFE:__WFE();

(内嵌汇编指令)

WFI:任一中断

WFE:唤醒事件

只有CPU时钟

保留

由于CPU时钟关闭,那些依赖CPU实时处理的外设功能就无法实现了。

通常用在低功耗通信场景,如串口、蓝牙、Lora等,平时睡眠模式,数据过来了退出睡眠,执行完成后继续睡眠。

停机(Stop)

更低

PDDS+LPDS+SLEEPDEEP

+(WFI或WFE)

任一外部中断(需先设置

时钟全部关闭

HSI、HSE的振荡器关闭,所以时钟全部关闭,CPU和外设停止工作。

开或低功耗模式(取决于PWR_CR寄存器配置)

保留

唤醒后,默认使用的是 HSI 时钟,时钟需要重新初始化(包括Systick)

待机(Standby)

超低

PDDS+SLEEPDEEP

+(WFI或WFE)

  • WKUP上升沿

  • NRST拉低复位

  • RTC唤醒

  • IWDG复位

时钟全部关闭

当 LSI 配置为 RTC或 IWDG 的时钟时,在待机模式下可以运行。

HSI、HSE的振荡器关闭......

丢失

单片机完全关闭了,唤醒就相当于按下复位键,单片机重新从头开始执行。

芯片在低功耗模式下,是不能下载程序的,要按住复位键下载。

  • WFI(Wait For Interrupt):

    • 等待中断,无论该中断是否被使能或挂起

    • 唤醒后,先执行中断服务程序,再进入主程序。

  • WFE(Wait For Event):

    • 等待事件,由事件或中断触发,它看的是标志位。

    • 事件唤醒,直接执行主程序;中断唤醒,和WFI一样。

    • 应用场景:低功耗唤醒、多核同步、RTOS任务同步

注意,立即睡眠和等待

相关函数

启用或禁用唤醒引脚功能

void PWR_WakeUpPinCmd(FunctionalState NewState)

启用或禁用访问RTC和备份寄存器的功能

void PWR_BackupAccessCmd(FunctionalState NewState)

NewState:

  • ENABLE

  • DISABLE

将PWR外设寄存器恢复为默认复位值

void PWR_DeInit(void)

进入 STANDBY 模式:

void PWR_EnterSTANDBYMode(void)

进入 STOP 模式:

void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)

PWR_Regulator:

  • PWR_MAINREGULATOR_ON:主调压器

  • PWR_LOWPOWERREGULATOR_ON:低功耗调压器

PWR_STOPEntry:

  • PWR_STOPENTRY_WFI:使用 WFI

  • PWR_STOPENTRY_WFE:使用 WFE

清除 PWR 的指定挂起标志:

void PWR_ClearFlag(uint32_t PWR_FLAG)

检查指定的PWR标志是否已设置:

FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG)

启用或禁用电压监测器(PVD):

void PWR_PVDCmd(FunctionalState NewState)

配置PVD的电压阈值:

void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)

判断唤醒源

STOP 模式下的唤醒:

Standby 模式下的唤醒:

唤醒后判断唤醒源:

复位后判断唤醒源:

测量单片机功耗