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

相关推荐
Zw-awa1 天前
volatile 与寄存器:SysTick->VAL 到底在读什么
stm32
艾莉丝努力练剑1 天前
【AI大模型接入SDK】ChatSDK 集成测试概述
jvm·c++·人工智能·学习·面试·集成测试·sdk
艾莉丝努力练剑1 天前
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
java·开发语言·网络·c++·人工智能·学习·sdk
Joe_Wang51 天前
【从0到1学习JVM · 14】堆内存各区域分工与Xms和Xmx设为一样的真相
java·jvm·学习·垃圾回收
東隅已逝,桑榆非晚1 天前
stack和queue(类函数学习和模拟实现)
c++·笔记·学习
Vcaker1 天前
Linux学习37-rook-ceph部署
linux·运维·学习
LHR_friendship1 天前
HCIA的相关笔记
笔记·hcia
阳光九叶草LXGZXJ1 天前
Linux-学习-12-JDK安装
java·linux·运维·学习
tiankongdeyige1 天前
游戏战斗系统学习第2篇:有限状态机 (FSM)
学习·游戏·typescript
an12321211 天前
ARM嵌入式学习笔记:SPI通信协议详解
arm开发·笔记·学习