文章目录
- 一、什么是低功耗?
- 二、STM32电源系统结构
- 三、低功耗模式介绍
-
- [1. 睡眠模式(sleep mode)](#1. 睡眠模式(sleep mode))
- [2. 停机模式(stop mode)](#2. 停机模式(stop mode))
- [3. 待机模式(standby mode)](#3. 待机模式(standby mode))
- 四、低功耗寄存器
-
- [1. 电源控制寄存器(PWR_CR)](#1. 电源控制寄存器(PWR_CR))
- [2. 电源控制/状态寄存器(PWR_CSR)](#2. 电源控制/状态寄存器(PWR_CSR))
- [3. 系统控制寄存器((SCB_SCR))](#3. 系统控制寄存器((SCB_SCR)))
- 五、低功耗库函数介绍
- 总结
一、什么是低功耗?
STM32的低功耗(low power mode)特性是其嵌入式处理器系列的一个重要优势,特别适用于需要长时间运行且功耗敏感的应用场景,如便捷式设备、物联网设备、智能家居系统等。
在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以有必要从控制功耗 入手,提供设备的续航时间。
二、STM32电源系统结构
系统是这4个部分进行供电

注:VDDA和VSSA必须分别联到VDD和VSS。
三、低功耗模式介绍
低功耗模式如何处理这些电源?
STM32具有运行、睡眠、停止和待机 四种工作模式。
睡眠、停止和待机是三种低功耗模式。
上电后默认是在运行模式,当内核不需要继续运行时,可以选择后面三种低功耗模式。

1. 睡眠模式(sleep mode)
在睡眠模式下,CPU停止工作,但所有外设(如ADC、通信接口等)仍然运行,时钟继续运转。这适用于需要暂时关闭CPU但外围设备需要继续工作的场景。
模式特点:
- 对系统影响小,但节能效果最差
- 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
进入条件:
- 当系统控制寄存器中的SLEEPDEEP位被清除(通常为0) ,并且SLEEPONEXIT位根据需求设置时(如果设置为1,则在最低优先级中断处理程序退出时进入sleep模式;如果为0,则执行WFI或WFE时立即进入)。
- 执行WFI (Wait For Interrupt)或WFE(Wait For Event)指令来进入。
唤醒条件:
- 任意一个中断都能将系统从Sleep模式唤醒。
- 如果执行WFE指令进入Sleep模式,则一旦发生唤醒事件时,MCU将唤醒。
2. 停机模式(stop mode)
在停机模式下,CPU和核心外围设备的时钟会停止,但部分唤醒源(如外部中断和某些定时器)仍然运行。这适用于需要长时间等待外部事件唤醒的应用,如等待用户输入或外部信号。Stop模式实现了非常低的功耗,同时保留了SRAM和寄存器的内容。
模式特点:
- 节能效果好,程序不会复位。但恢复时间较长(比如振荡器需要重新起震等)。
- 在停机模式下,所有I/O引脚都保持它们在运行模式时的状态
- 退出停止模式,HSI RC振荡器被选为系统时钟。【刚开机时,系统时钟是72MHz,进入停机模式后,再从停机模式退出,系统时钟变成HSI,8MHz,如果想要系统正常工作,需要重新配置72MHz。】
进入条件:
- 需要将SLEEPDEEP位设置为1 以进入深度睡眠模式,然后通过设置电源控制/状态寄存器(PWR_CSR)中的PDDS位为0来选择进入Stop模式。
- 根据需求设置LPDS位(LPDS = 0:表示在深睡眠模式下,电压调节器保持开启 状态;LPDS = 1:表示在深睡眠模式下,电压调节器进入低功耗模式。)。
- 执行WFI (Wait For Interrupt)或WFE(Wait For Event)指令来进入。
- 在进入Stop模式之前,通常需要关闭不必要的外设时钟,并保存需要保留的状态信息。
唤醒条件:
- stop模式可以通过外部中断(如按键中断、USART接收中断等)唤醒。
- RTC闹钟事件、USB唤醒、以太网(ETH)唤醒等也可以作为唤醒源,但这些通常需要通过外部中断来触发。
3. 待机模式(standby mode)
在该模式下,CPU、外围设备和时钟都被关闭,只保留唤醒逻辑和备份寄存器。这适用于不需要保留RAM内容且可以从复位状态恢复的设备,常见于需要极低功耗且稀疏唤醒的应用。Standby模式时STM32中功耗最低的模式之一。
模式特点:
- 节能效果最好,但程序会复位,只有少数条件唤醒。
- 在Standby模式下,大部分IO引脚处于高阻态,只有复位引脚、TAMPER引脚(如果配置为防侵入或校准输出)和WKUP引脚可用作唤醒源。
进入条件:
- Standby模式进入前,需要清除 电源控制/状态寄存器(PWR_CSR)中的WUF位,以确保没有未处理的唤醒标志。
- 将SLEEPDEEP位设置为1 以进入深度睡眠模式,并设置PDDS位为1来选择进入Standby模式。
- 执行WFI 或WFE指令进入Standby模式。
唤醒条件:
- Standby模式可以通过WKUP引脚的上升沿唤醒。
- RTC闹钟事件也可以作为唤醒源
- 独立看门狗(IWDG)复位和NRST引脚上的外部复位也可以唤醒STM32,但这通常用于系统复位而非低功耗唤醒。
三种低功耗模式进入条件示意图:

四、低功耗寄存器
1. 电源控制寄存器(PWR_CR)

关注:
PDDS位 :掉电深睡眠
与LPDS位协同操作
0:当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS位控制。
1:CPU进入深睡眠时进入待机模式。
LPDS位 :深睡眠下的低功耗
PDDS=0时,与PDDS位协同操作
0:在停机模式下电压调压器开启
1:在停机模式下电压调压器处于低功耗模式
2. 电源控制/状态寄存器(PWR_CSR)

关注:
EWUP位 :使能WKUP引脚
0:WKUP引脚为通用I/O。WKUP引脚上的事件不能将CPU从待机模式唤醒
1:WKUP引脚用于将CPU从待机模式唤醒,WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿 将系统从待机模式唤醒)
注:在系统复位时清除这一位。
WUF位 :唤醒标志
该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CWUF位清除。
0:没有发生唤醒事件
1:在WKUP引脚上发生唤醒事件或出现RTC闹钟事件。
注:当WKUP引脚已经是高电平时,在(通过设置EWUP位)使能WKUP引脚时,会检测到一个额外的事件。
3. 系统控制寄存器((SCB_SCR))

SLEEPDEEP位 :
0:睡眠
1:深度睡眠
SLEEPONEXIT位 :
0:立即睡眠
1:中断退出后睡眠
五、低功耗库函数介绍
// 睡眠模式
HAL_PWR_EnterSLEEPMode();
// 停机模式
HAL_PWR_EnterSTOPMode();
// 待机模式
HAL_PWR_EnterSTANDBYMode();
// 使能时钟电源
__HAL_RCC_PWR_CLK_ENABLE();
// 使能WAKEUP引脚的唤醒功能
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1)
// 清除唤醒标记,否则将持续保持唤醒状态
__HAL_PWR_CLEAR_FLAG();
总结
低功耗是STM32非常重要的嵌入式处理器系列的特性,适用于长时间运行且功耗敏感的应用场景。它有3种工作模式,分别为睡眠、停止和待机模式,我们需要了解这三种工作模式的特点、进入条件以及唤醒条件,帮助我们更快速的提高设备的续航时间。