STM32学习笔记【33.低功耗】

文章目录


一、什么是低功耗?

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模式。
  • 执行WFIWFE指令进入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种工作模式,分别为睡眠、停止和待机模式,我们需要了解这三种工作模式的特点、进入条件以及唤醒条件,帮助我们更快速的提高设备的续航时间。

相关推荐
Piko6142 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
Zeeland3 小时前
构建护城河:自学习 Agent
学习
brave_zhao4 小时前
nginx的进程架构
java·学习·nginx
枫零NET4 小时前
跟着OpenCode学习Pi Coding Agent-05-Agent的类型系统
人工智能·学习
Day(AKA Elin)4 小时前
【Day】MTP(Multi Token Prediction)技术学习
python·深度学习·学习·llama
Waay4 小时前
Linux 三个核心环境变量配置文件、作用域、生效方式完整梳理
linux·运维·学习·云原生·容器
Piko6144 小时前
锐捷交换机 DHCP Server部署
运维·网络·笔记
枫零NET4 小时前
跟着OpenCode学习Pi Coding Agent-06-Agent循环
学习
小弥儿5 小时前
GitHub今日热榜 | 2026-07-09:OfficeCLI 以 92% 日增幅入围
学习·开源·github