type
date
slug
category
icon
password
参考资料1.1 STM32F4 系列1.1.1 电源说明1.1.2 睡眠模式1.1.3 停止模式1.1.4 待机模式1.1.5 功耗对比1.1.6 其他方法降低系统时钟速度外设时钟门控 动态电压调整调压器供电技巧ART 配置I/O 配置使用DMA代码优化2.1 STM32L4系列2.2.1 运行模式2.2.2 代码执行(FLASH SRAM1 SRAM2)2.2.3 低功耗模式2.2.4 低功耗定制外设
本节介绍 STM32 低功耗模式,对比 STM32F4 和 STM32L4 系列差异。为了说明功耗模式差异,电源系统也做了简介。除了芯片功耗模式,还介绍了其他省电的技巧。
参考资料
- Reference Manuals RM0090 and RM0368(直接网络搜索)
- Application Note “How to achieve the lowest current consumption with STM32F2xx” (AN3430)
The majority of these features are common in all STM32F2 and STM32F4 MCUs, so the user can get more details by referring to application note “How to achieve the lowest current consumption with STM32F2xx” (AN3430) and to reference manuals RM0090 and RM0344.
- st.com/resource/en/user_manual/um1725-description-of-stm32f4-hal-and-lowlayer-drivers-stmicroelectronics.pdf(HAL PWR 使用手册)
下面分别介绍STM32F4系列和STM32L4系列芯片差异(F1未在讨论之列),着重说明低功耗模式区别,唤醒源差异以及一些使用中常见问题。
由于官方数据手册,参考手册和用户指南等多用英语,下文会标出常用概念英语。有时正文中可能混用英语以防止概念混淆,读者可以搜索浏览器搜索本文,即可找到英文对应汉语表达。
1.1 STM32F4 系列
默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU 通过 HCLK 提供时钟,并执行程序代码。
系统提供了多个低功耗模式,可在 CPU 不需要运行时 (例如等待外部事件时)节省功耗。由用户根据应用选择具体的低功耗模式,以在低功耗、短启动时间和可用唤醒源之间寻求最佳平衡。

器件有三个低功耗模式:
- 睡眠模式(Cortex™-M4F 内核停止,外设保持运行)
- 停止模式(所有时钟都停止)
- 待机模式(1.2 V 域断电)
此外,可通过下列方法之一降低运行模式的功耗:
- 降低系统时钟速度
- 不使用 APBx 和 AHBx 外设时,将对应的外设时钟关闭
1.1.1 电源说明

STM32F4系列主电源介于 1.8-3.6V之间,经过线性调压器,用于提供内部1.2V数字电源。当主电源断电,可通过电池 供电,为备份域供电。备份域主要有 RTC、RTC备份寄存器、备份SRAM(STM32F401x没有)、LSE振荡器、PC13 到 PC15 I/O,以及 PI8 I/O几个模块构成。特别的为提高ADC转化精度,为ADC提供独立A/D转换器电源和参考电压。

关于备份域各功能,有如下注意事项:
- 写保护后需解锁:设备复位后,备份域的RTC寄存器、RTC备份寄存器和备份SRAM将受到保护,以防止意外写访问,继续操作需要使能备份域访问。
- RTC和RTC备份寄存器:实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的可编程的周期唤醒标志。RTC 包含 20 个备份数据寄存器(80 字节),在检测到入侵事件时将复位。
- 备份SRAM: 4 KB ,可被 32 位、16 位、8 位访问。使能低功耗备份调压器(LP调压器)时,即使处于待机或 模式(此时备份调压器打开),备份 SRAM 的内容也能保留。一直存在VBAT 时,可以将此备份 SRAM 视为内部 EEPROM。

4、PC3到PC15功能:备份域供电方式不同,功能有差异。
如果通过 对备份域供电时(模拟开关连接到 VDD),可实现以下功能:
- PC14 和 PC15 可用作 GPIO 或 LSE 引脚
- PC13 可用作 GPIO 或 RTC_AF1 引脚
由于该开关的灌电流能力有限 (3 mA),因此使用 GPIO PI8 和 PC13 到 PC15 时存在以下限制:每次只能有一个 I/O 用作输出,最大负载为 30 pF 时速率不得超过 2 MHz ,并且这些I/O 不能用作电流源(如用于驱动 LED)。
如果通过 对备份域供电时(由于不存在 ,模拟开关连接到 ),可实现以下功能:
- PC14 和 PC15 只能用作 LSE 引脚
- PC13 可用作 RTC_AF1 引脚
- PI8 可用作 RTC_AF2
关于调压器,有如下几个注意事项:
- 线性调压器为除了备份域和待机电路以外的1.2V数字电路供电
- 调压器复位后处于使能状态,有三种工作模式
- 运行模式:1.2V 域(内核、存储器和数字外设)全功率,可通过软件调整为不同的电压值。
- 停止模式:调压器为 1.2 V 域提供低功率,保留寄存器和内部 SRAM 中的内容。
- 待机模式:调压器掉电。除待机电路和备份域外,寄存器和 SRAM 的内容都将丢失。
1.1.2 睡眠模式
- 关闭内核时钟,内核停止,而外设正常运行,在软件上表现为不再执行新的代码。这个状态会保留睡眠前的内核寄存器、内存的数据。该模式下功耗和系统时钟以及调压器范围有关。

睡眠模式唤醒
- 如果使用 WFI 进入:中断向量表中所有中断可以唤醒
- 如果使用 WFE 进入:唤醒事件,注意唤醒后是否需要清除挂起的标志位

1.1.3 停止模式
- 保持寄存器和SRAM数据下,功耗最低模式。进入停止模式主要有如下特点
- 1.2V域中时钟全部关闭( PLL, HSI, HSE)
- 线性调压器工作在常规(Normal)或低功耗(Low Power)模式
- 所有I/O口状态和运行状态保持一致
- Flash 内存可配置为停止模式和深度掉电模式(比停止模式功耗低,恢复操作速度慢)
- SRAM 和 寄存器数据保留
- 唤醒后: 若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI 指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。唤醒后,STM32 会使用 HSI 作为系统时钟。通过如下函数可以配置唤醒后时钟源。


- 在停止模式下,ADC 或 DAC 也会产生功耗,除非在进入停止模式前将其禁止。要禁止这些 转换器,必须将 ADC_CR2 寄存器中的 ADON 位和 DAC_CR 寄存器中的 ENx 位都清零。
停止模式唤醒
Any EXTI Line (Internal or External) configured in Interrupt/Event mode.
- 如果使用 WFI 进入:所有配置为中断模式的线。(必须在 EXTI 中使能对应的 NVIC 中断向量)。





- 如果使用 WFE 进入:所有配置为事件模式的线。
使用停机模式注意以下两个问题:
- 进入停机模式前,一定要关闭滴答定时器,实际测试发现滴答定时器中断也能唤醒停机模式。
- 当一个中断或唤醒事件导致退出停机模式时,HSI RC 振荡器被选为系统时钟。这个时候用户要根据需要重新配置时钟,如果使用的 HSE 时钟,那么要重新配置并使能 HSE 和 PLL。
1.1.4 待机模式
- 待机时: 调压器断电,内核停止,片上外设也停止;内核寄存器、内存的数据会丢失(备份域保存);除复位引脚、RTC_AF1 引脚及 WKUP 引脚,其它 I/O 口均工作在高阻态。
- 唤醒后: 相当于芯片复位,在程序表现为从头开始执行代码。

待机模式唤醒
检测到外部复位( NRST 引脚)、 IWDG 复位、 WKUP 引脚上升沿、 RTC 闹钟、入侵事件或时间戳事件时,微控制器退出待机模式。从待机模式唤醒后,除 PWR 电源控制/状态寄存器 (PWR_CSR) 外,所有寄存器都将复位。
1.1.5 功耗对比

对于运行模式,数值在从 Flash 执行 CoreMark 基准测试时测量的。最低功耗是同时使用待机模式和 模式时下实现的。对于所有 STM32F4 微控制器,待机模式电流为 2 到 3 µA。模式电流小于 1 µA,专为电池使用设计。通过实施各种节能功能,加强低功耗模式,以实现能耗的高度优化。
1.1.6 其他方法
此外,可通过下列方法之一降低运行模式的功耗:
降低系统时钟速度
- STM32F4提供不同的时钟源 (external crystal HSE, internal oscillator HSI, phase-locked loop PLL, internal oscillator LSI, external oscillator LSE)配置,可根据需要选择。
- 运行模式下,可通过对预分频寄存器编程来降低系统时钟(SYSCLK、HCLK、PCLK1 和 PCLK2)速度。
- 进入睡眠模式之前,也可以使用这些预分频器降低外设速度。
系统时钟有最低要求,因为Ethernet, USB high speed and full speed, I2S and SDIO需要指定的时钟频率。
- Ethernet (以太网)
- 通常使用 25 MHz 的晶振作为时钟源,通过 PHY(物理层)芯片生成 125 MHz 的时钟用于千兆以太网。
- USB (Universal Serial Bus)
- Full Speed (全速):时钟频率为 48 MHz。
- High Speed (高速):时钟频率为 480 MHz。
- I2S (Inter-IC Sound)
- I2S 的时钟频率取决于采样率和数据格式。常见的音频采样率有 44.1 kHz、48 kHz、96 kHz 等。I2S 主时钟频率通常是采样率的 256 倍、384 倍或 512 倍。
- SDIO (Secure Digital Input Output)
- SDIO 的时钟频率可以高达 50 MHz,用于高速数据传输模式。
外设时钟门控
- 在运行模式下,可随时停止各外设和存储器的 HCLKx 和 PCLKx 以降低功耗。
- 要进一步降低睡眠模式的功耗,可在执行 WFI 或 WFE 指令之前禁止外设时钟。
动态电压调整
工作电压降低可以有效降低总体功耗,特别对于系统无需最高频率运行,较低工作频率即满足系统运行需求。这种情况,可降低时钟频率以适应处理需求时,调整提供给1.2V域(核心、内存和数字外设)的STM32F4调压器输出电压。
• STM32F427x/437x/429x/439x: three voltage scales – scale3 (up to 120 MHz) – scale2 (from 120 to 144 MHz) – scale1 (up to 180 MHz) • STM32F405x/415x/407x/417x: two voltage scales – scale2 (up to 144 MHz) – scale1 (up to 168 MHz) • STM32F401x: two voltage scales – scale3 (up to 60 MHz) – scale2 (up to 84 MHZ)S
调压器供电技巧
- 超驱动模式(Over-drive mode)下,微控制器可以在更高的频率下运行,从而提高性能。(该模式只适用 STM32F429x/439x 设备)
- 低电压模式,降低低功耗调压器输出电压,该模式只能在 STM32F429x/439x 和 STM32F401x设备停止模式使用
- 欠驱动模式(Under-drive mode)下,1.2 V 域在降低泄漏模式中得到保留。在主调压器或者低功耗调压器停止模式下可用。
ART 配置
在 STM32 微控制器中,ART Accelerator(Adaptive Real-Time Accelerator)是一种用于加速指令和数据访问的技术。它通过优化从闪存读取指令的速度来提高系统性能。以下是 ART Accelerator 的一些关键特点:
- 指令预取:
- ART Accelerator 能够预取指令,减少等待时间,提高执行效率。
- 零等待状态:
- 当系统频率在一定范围内时,ART 可以实现零等待状态,从而提高程序执行速度。
- 闪存加速:
- 通过优化从闪存读取的过程,ART Accelerator 可以显著提升闪存访问速度,尤其是在高频率运行时。
- 动态调整:
- 根据执行的指令和数据访问模式,ART Accelerator 可以动态调整其操作,以提供最佳性能。
当用户无需系统全速运行,而是想进一步降功耗,推荐关闭掉预取缓存,减少堆Flash过度访问,以降低最高10%总体功耗(性能影响较小)。
I/O 配置
从功耗和防干扰考虑。不使用的引脚推荐设置为模拟模式
- 若处于输入模式
- 上拉输入:I/O 引脚为低电平时,会产生电流消耗
- 上下拉输入:外部中间电平,为了区分输入值,施密特出发电路产生电流消耗
- 浮空输入:外部电磁噪声
- 输出引脚:考虑下拉电阻和外部负载电流消耗
综上考虑,不使用的引脚设置为模拟模式,悬空即可。
建议调整 I/O 引脚的驱动强度和速度,选择最低可能的速度。或者推挽输出,并设置为低电平,以减少漏电流。如果不使用时,用户还应禁用时钟输出的 MCO 引脚。这些措施有助于进一步降低功耗。
关于GPIO推挽输出,可参考STM32 GPIO基础(pp-od-pu-pd)
使用DMA
外设使用DMA,可以提升性能,也可以降低功耗。这是因为CPU为了避免外设缓存寄存器溢出,需要保持运行读出缓存数据。若使用DMA,CPU可以在传输完成之前,进入休眠,以降低功耗。
关于DMA 使用参考 。
代码优化
- 使用编译器优化选项(如 -O2 或 -O3)来优化代码执行效率。
- 尽量减少循环和函数调用的开销,使用内联函数和循环展开(loop unrolling)技术
- 直接使用寄存器读写操作
为了实现最低电流消耗,用户还可以进行一些编译器优化无法实现的额外优化。以下是一些建议:
- 简化程序流程:
- 针对常见情况进行优化,减少条件判断和分支。
- 实现早期退出(early exit)策略,避免不必要的计算。
- 内存管理:
- 减少内存分配和释放频率,使用静态内存分配。
- 优化数据结构以减少内存占用。
- 任务调度:
- 优化任务调度,确保 CPU 在空闲时尽快进入低功耗模式。
- 合并任务,减少上下文切换的开销。
- 减少中断:
- 合并中断处理程序,减少中断频率。
- 使用标志位或缓冲区减少中断服务程序中的处理时间。
- 数据处理:
- 使用定点运算代替浮点运算,以减少计算复杂度。
- 在可能的情况下,使用增量更新而不是完全重计算。
- 代码精简:
- 移除冗余代码和不必要的功能。
- 合并相似的代码片段,减少代码重复。
2.1 STM32L4系列
有了STM32F4系列的讲解,STM32L4系列相对就简单点,着重讲L4系列特殊之处。
2.2.1 运行模式
STM32L4系列支持电压和频率范围可调,支持以下范围:
- 范围1增益:系统频率可达120 MHz(仅适用于STM32L4+系列)
- 范围1:系统频率可达80 MHz
- 范围2:系统频率可达26 MHz,具备更高效能(比范围1高达15%)。
- 低功耗运行:系统频率2MHz,效能比范围2提高20%。


低功耗运行是通过使用内部低功耗稳压器为逻辑电路供电实现的。在此模式下,具有独立时钟的外设仍可以在16 MHz的内部高速振荡器(HSI)上运行。这些外设包括I2C、USART、LPUART1、LPTIM和SWPMI1。

2.2.2 代码执行(FLASH SRAM1 SRAM2)
STM32L4和STM32L4+微控制器能够从内部Flash存储器、SRAM1和SRAM2、外部Quad-SPI/OctoSPI或FSMC Bank 1执行代码。运行在SRAM中,功耗最低。运行在Flash,若打开ART加速器会降低访问次数,以降低总体功耗。

2.2.3 低功耗模式
- 支持7种低功耗低功耗模式,并且每种模式下,还可以通过调整时钟源和频率,关闭外设时钟进行微调。并且除了Shutdown模式模式有掉电复位(BOR)和IWDG保证系统安全运行。
- 支持低功耗运行/休眠模式,该模式下电流消耗低,但可以保证外设不关闭,CPU连续处理。还可以通过打开低功耗调压器,关闭Flash内存(掉电模式),系统时钟限制在2MHz。
- 支持三种停止模式,该模式下,高速晶振关闭,之后又LSI和LSE打开。
- stop 0 mode:主调压器和低功耗调压器打开
- stop 1 mode:主调压器关闭,低功耗调压器打开
- stop 2 mode:主调压器关闭,低功耗调压器打开,唤醒外设减少
- 所有I/O口状态和运行状态保持一致
- PLL、HSI、HSE、MSI 时钟全部关闭
- 线性调压器工作在常规(Normal)或低功耗(Low Power)模式
- SRAM1、SRAM2 和 寄存器数据保留
- I2Cx,、USARTx、LPUART和USB等外设可以唤醒停止模式
停止模式如下特点


- 支持待机模式
- PLL、HSI,、MSI 和HSE 晶振关闭,调压器关闭
- SRAM1、寄存器内容丢失,SRAM2可以保存(低功耗调压器打开)
- I/O 可配置为上下拉,外设配置保存
- 可通过五个唤醒引脚,复位引脚、独立看门狗服务和RTC唤醒
- 支持关机模式
- 功耗最低,关闭内部调压器和电压监测功能
- 可通过五个唤醒引脚,复位引脚、RTC唤醒


STM32L4 and STM32L4+ ultra-low-power features overview中表6也对所有低功耗模式做了总结。

2.2.4 低功耗定制外设
- STM32L4xx 系列MCU有多个 12-bit / 5 Msps ADCs,假如持续供电,ADC的功耗大体可按200 µA / Msps 估算,5 Msps采样率下大概消耗 1mA。可采取两种方法以降低功耗,第一种限制采样率(可降低到几百µA,但运行时间延长),第二种是保持最高采样率,快速切换超低功耗模式 (Stop or Standby mode)。
- STM32L4xx 系列MCU有多个DACs,DAC具有采样保持功能,即在采样时将电压值保持在一个电容上。当不进行转换时,DAC核心和缓冲器完全关闭,DAC输出处于高阻态,有利于降低功耗。
- STM32L4xx 系列MCU有一个RTC,RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的可编程的周期唤醒标志。还提供时间戳,侵入监测等特别功能。
- RTC在Shutdown 模式下仍保持打开,将MCU从低功耗中唤醒。
- RTC有128字节备份寄存器存储上下文信息(standby可用到,因为SRAM和寄存器清除)或者在侵入检测时保护设备敏感信息。
- RTC支持LSE和LSI两个低功耗低速时钟。
- STM32L4xx 系列MCU具备LCD控制器,适用低功耗的液晶显示器。控制器可以选择性地使用内部升压转换器,以在不同的VDD(电源电压)范围内保持LCD的对比度。使包含升压转换器,控制器的功耗也低至5微安(不包括LCD的消耗)。
- STM32L4xx 系列MCU有一个16bit低功耗定时器(LPTIM),LPTIM可以从多种时钟源获取时钟(LSI、LSE和HCLK),在深度睡眠模式(如Stop或Standby模式)下,LPTIM仍然可以继续运行。可以用作“脉冲计数器”,由于其低功耗,特别适合用作“Time-out Function”。
- STM32L4xx 系列MCU支持低功耗通用异步接收器/发送器(LPUART)。
- 只需使用32.768 kHz的LSE(低速外部)时钟即可支持高达9600波特率的通信。更高速率可以更换时钟源。
- 处于Stop模式时,LPUART仍可以保持待机状态,等待接收UART帧,同时保持极低的能耗。
- LPUART支持多种唤醒方式,以便从Stop模式中唤醒MCU:
- 地址匹配唤醒:当接收到匹配的地址时唤醒。
- 起始位检测唤醒:当检测到起始位时唤醒。
- 接收到字节时唤醒:当接收到完整的字节时唤醒。
- STM32L4xx 系列MCU可以通过I2C接口唤醒MCU
- 所有的I2C寻址模式都被支持
- 为了在Stop模式下实现唤醒,必须选择HSI(高速内部振荡器)作为I2C时钟源(I2CCLK),在Stop模式中,HSI是关闭的。
- 当检测到I2C START信号时,I2C接口会开启HSI,并将SCL线拉低,直到HSI完全启动。HSI启动后,用于接收地址。
- 如果地址匹配,I2C会在MCU唤醒期间继续将SCL保持在低电平。一旦软件清除ADDR标志,SCL线恢复正常,数据传输继续。
- 如果地址不匹配,HSI会关闭,MCU不会被唤醒。
- STM32L4xx 系列MCU的USART可以在MCU处于Stop0或Stop1模式时唤醒MCU。USART的时钟源必须是HSI(高速内部振荡器)或LSE(低速外部振荡器)。USART支持多种唤醒方式如下:
- 地址匹配唤醒:当接收到匹配的地址时唤醒。
- 起始位检测唤醒:当检测到起始位时唤醒。
- 接收到字节时唤醒:当接收到完整的字节时唤醒。
- STM32L4xx 系列MCU的USB接口可以在MCU处于Stop0或Stop1模式时唤醒MCU。支持多种唤醒方式唤醒事件:
- 从挂起恢复:当USB设备从挂起状态恢复时,可以唤醒MCU。这通常发生在主机重新与设备进行通信时。
- 连接检测协议事件:当检测到USB设备连接到主机时,MCU可以被唤醒。这涉及到USB设备的物理连接检测。
STM32L4 and STM32L4+ ultra-low-power features overview中表7总结了外设功能,包括唤醒能力等细节。也是对上面内容的一个总结。
- Author:felixfixit
- URL:http://www.felixmicrospace.top/1284d032dcc180f9ac09e7c3e14b967e
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!