STM32L051 的低功耗等级(功耗模式)及其对应的状态机模型。STM32L051 属于 STM32L0 系列,是 STMicroelectronics 专为超低功耗应用设计的微控制器,其功耗模式设计非常精细,以满足不同应用场景对功耗和唤醒速度/状态保持的需求。
核心低功耗模式概览:
STM32L051 主要提供以下功耗模式,按功耗从高到低排列:
- 运行模式 (Run Mode)
- 低功耗运行模式 (Low-Power Run Mode - LPRun)
- 睡眠模式 (Sleep Mode)
- 低功耗睡眠模式 (Low-Power Sleep Mode - LPSleep)
- 停机模式 (Stop Mode)
- 待机模式 (Standby Mode)
- 关机模式 (Shutdown Mode)
状态机模型:
下图描述了这些模式之间的转换关系以及主要的进入/退出条件:
+-----------------------------------------------------------------------+
| 运行模式 (Run) |
| (Core: On, Periph: On, Clocks: HSI/MSI/HSE/PLL, Regs/RAM: Keep) |
| (Highest Power Consumption) |
+-----------------------------------------------------------------------+
| WFI/WFE/SLEEPONEXIT
| OR LPR bit set & MSI as sysclk & Vcore Range 2
v
+----------------------+ +----------------------+
| 睡眠模式 (Sleep) |<----->| 低功耗睡眠模式 (LPSleep) |
| (Core: Off, | | (Core: Off, |
| Periph: On, | | Periph: On, |
| Clocks: SysClk On, | | Clocks: SysClk Off, |
| Regs/RAM: Keep) | | LSE/LSI/MSI On*, |
| | | Regs/RAM: Keep) |
+----------------------+ +----------------------+
| WFI/WFE/SLEEPONEXIT
| OR Enter Stop via PWR_CR
v
+-----------------------------------------------------------------------+
| 停机模式 (Stop) |
| (Core: Off, Periph: Off (SRAM/Regs Keep), Clocks: Off (LSE/LSI/MSI*) |
| (Low Power Consumption, Fast Wakeup, Full Context Retention) |
+-----------------------------------------------------------------------+
| WFI/WFE/SLEEPONEXIT
| OR Enter Standby via PWR_CR
v
+-----------------------------------------------------------------------+
| 待机模式 (Standby) |
| (Core: Off, Periph: Off, Clocks: Off (LSI/LSE On* for RTC/WKUP), |
| SRAM/Regs: Lost (Except Backup Domain), IOs: High-Z or Analog) |
| (Very Low Power Consumption, Reset-like Wakeup) |
+-----------------------------------------------------------------------+
| Enter Shutdown via PWR_CR
v
+-----------------------------------------------------------------------+
| 关机模式 (Shutdown) |
| (Core: Off, Periph: Off, Clocks: Off (LSE On* for RTC if used), |
| SRAM/Regs: Lost (Except Backup Domain), IOs: High-Z or Analog) |
| (Lowest Power Consumption, Reset-like Wakeup) |
+-----------------------------------------------------------------------+
箭头说明:
- 垂直向下箭头 (->): 表示从高功耗模式进入低功耗模式的主要路径。通常通过执行
WFI
(Wait For Interrupt) 或 WFE
(Wait For Event) 指令、设置 SLEEPONEXIT
位、或直接配置电源控制寄存器 (PWR_CR
) 中的相关位 (LPMS
, FWU
, ULP
, LPSDSR
, PDDS
, CWUF
) 来实现。
- 水平双向箭头 (<->): 表示
睡眠模式
和 低功耗睡眠模式
之间可以根据配置(主要是系统时钟源是否关闭)直接切换。
- 唤醒事件/中断: 所有低功耗模式都可以被特定的唤醒源(外部中断、RTC 闹钟、IWDG、特定外设事件等)唤醒。唤醒后,微控制器会返回到进入低功耗模式之前的运行状态(
运行模式
或 低功耗运行模式
),除了:
待机模式
和 关机模式
唤醒后相当于进行一次复位(从复位向量重新开始执行),SRAM 和寄存器内容丢失(备份域寄存器内容保留)。
停机模式
唤醒后,程序会从进入停机模式指令 (WFI/WFE
) 之后的下一条指令开始执行(或响应唤醒事件的中断服务程序),所有寄存器和 SRAM 内容保留。
各低功耗模式详细说明:
-
运行模式 (Run Mode)
- 状态: CPU 内核运行,外设可以开启(取决于配置),所有时钟(HSI, MSI, HSE, PLL)都可以使用。
- 功耗: 最高。典型值取决于主频、开启的外设数量和电压调节器范围 (Range)。例如,在 16MHz (Range 1) 下运行 CoreMark 时约为 1.5mA,在 2MHz (Range 2) 下运行约为 230μA。
- 唤醒源: 不适用(本身是活动状态)。
- 唤醒时间: 不适用。
- 状态保持: 所有寄存器和 SRAM 内容保持。
- 进入方式: 上电复位、从任何低功耗模式唤醒(除了待机/关机唤醒相当于复位)。
- 退出方式: 执行
WFI
/WFE
进入睡眠;配置进入更低功耗模式;或通过软件切换时钟/电压调节器进入 低功耗运行模式
。
-
低功耗运行模式 (Low-Power Run Mode - LPRun)
- 状态: CPU 内核运行,外设可以开启(但只能使用低功耗时钟源:MSI (典型 131kHz, 262kHz 等低速档位) 或 HSI16 (在分频后低频运行),不能使用 HSE 或 PLL。电压调节器必须切换到 低功耗范围 (Range 2)。
- 功耗: 显著低于普通运行模式。典型值在 MSI 131kHz + Range 2 下约为 30μA (仅内核运行)。
- 唤醒源: 不适用(本身是活动状态)。
- 唤醒时间: 不适用。
- 状态保持: 所有寄存器和 SRAM 内容保持。
- 进入方式: 在
运行模式
下,将系统时钟切换到 MSI (低速档) 或分频后的 HSI16,并将电压调节器设置为 Range 2 (PWR_CR
的 VOS
位和 LPR
位)。
- 退出方式: 将电压调节器切换回 Range 1 (
LPR=0
),并将系统时钟切换到 HSI/HSE/PLL 以返回普通 运行模式
;也可以执行 WFI
/WFE
进入 低功耗睡眠模式
。
-
睡眠模式 (Sleep Mode)
- 状态: CPU 内核停止运行,但系统时钟 (SYSCLK) 仍然运行。开启的外设继续工作并可以产生中断/事件来唤醒内核。
- 功耗: 高于
停机模式
但低于 运行模式
。取决于开启的外设数量和时钟频率。典型值在 2MHz 下约为 100μA (仅内核停止)。
- 唤醒源: 任何使能的中断或事件(来自 NVIC 或外设)。
- 唤醒时间: 非常快 (几个时钟周期)。CPU 从中断/事件发生点立即恢复执行(或响应中断)。
- 状态保持: 所有寄存器和 SRAM 内容保持。
- 进入方式: 执行
WFI
或 WFE
汇编指令;或设置内核寄存器 (SCR
) 的 SLEEPONEXIT
位,在退出最低优先级中断后自动进入睡眠。
- 退出方式: 发生使能的中断或事件。
-
低功耗睡眠模式 (Low-Power Sleep Mode - LPSleep)
- 状态: CPU 内核停止运行,系统时钟 (SYSCLK) 被关闭。只有低功耗时钟源保持运行:LSE (32.768kHz 外部晶振), LSI (~37kHz 内部 RC), 或者 MSI (在低速档位,如 65.5kHz, 131kHz)。开启的外设如果依赖 SYSCLK 则停止工作,但依赖 LSE/LSI/MSI 的外设(如 LPUART, LPTIM, RTC, IWDG)可以继续工作并产生唤醒事件。
- 功耗: 显著低于普通睡眠模式。典型值在仅 LSI 或 LSE 运行 + SRAM 保持下约为 1.5μA - 2μA。
- 唤醒源: 来自运行中的低功耗外设的事件(如 LPUART 接收、LPTIM 比较匹配、RTC 闹钟)、外部中断 (EXTI)、IWDG 复位(如果使能)等。不能响应需要 SYSCLK 的外设中断。
- 唤醒时间: 较快。需要重新使能系统时钟,但比
停机模式
唤醒可能稍快一点(因为电压调节器保持运行)。通常在微秒级。
- 状态保持: 所有寄存器和 SRAM 内容保持。
- 进入方式:
- 在
睡眠模式
下,关闭系统时钟 (SYS_CFGR
寄存器配置)。
- 在
低功耗运行模式
下执行 WFI
或 WFE
。
- 退出方式: 发生支持的唤醒事件。系统时钟根据配置重新启动,CPU 恢复执行。
-
停机模式 (Stop Mode)
- 状态: CPU 内核停止运行,所有高速时钟关闭 (HSI, HSE, PLL, MSI, SYSCLK)。核心电压调节器可以配置为保持运行 (Regulator ON) 或进入低功耗状态 (Low-Power Regulator)。只有 LSE 和 LSI 可以保持运行 (可选),用于驱动 RTC, IWDG, LPUART, LPTIM 或作为唤醒源。所有外设时钟停止。I/O 引脚状态保持。
- 功耗: 非常低。典型值:
Regulator ON
+ SRAM 保持 + LSI/LSE 关闭:约 1.1μA
Low-Power Regulator
+ SRAM 保持 + LSI/LSE 关闭:约 0.4μA
- 开启 RTC/LSE:额外增加 ~1μA
- 唤醒源: 外部中断 (EXTI - 包括 RTC 闹钟事件、Tamper 事件)、特定引脚上升沿、LPTIM 异步事件、IWDG 复位(如果使能)等(依赖于保持运行的 LSE/LSI)。
- 唤醒时间: 快 (微秒级)。因为电压调节器状态可配置为保持运行或快速恢复。程序从进入停机模式的指令 (
WFI/WFE
) 之后继续执行(或响应唤醒事件的中断)。
- 状态保持: 所有寄存器和 SRAM 内容保持。这是
停机模式
的关键优势之一。
- 进入方式: 配置电源控制寄存器 (
PWR_CR
) 中的 LPMS
位选择 Stop
模式,设置 LPSDSR
(选择 Regulator 模式),FWU
(快速唤醒),ULP
(超低功耗 - 关闭 Flash 电源) 等选项,然后执行 WFI
或 WFE
。
- 退出方式: 发生支持的唤醒事件。系统时钟根据配置重新启动(通常是 MSI),CPU 恢复执行。
-
待机模式 (Standby Mode)
- 状态: 电压调节器关闭 (核心电源域断电)。所有高速和低速时钟关闭 (HSI, HSE, PLL, MSI, SYSCLK, LSI, LSE - 但 LSE 可以 被独立配置为保持运行以驱动 RTC)。SRAM 和寄存器内容丢失 (除了备份域寄存器)。大部分 I/O 引脚进入高阻态或模拟状态 (具体取决于配置)。只有备份域 (Backup Domain) 和待机电路保持供电。
- 功耗: 极低。典型值:
- LSE 关闭:约 0.27μA
- LSE 开启 (RTC 运行):约 0.95μA
- 唤醒源: 有限:
- 特定的唤醒引脚 (
WKUPx
) 上升沿。
- RTC 闹钟事件 (如果 LSE/LSI 配置为保持运行)。
- IWDG 复位 (如果使能)。
- NRST 引脚外部复位。
- 唤醒时间: 慢 (毫秒级)。唤醒过程相当于一次复位(冷启动)。程序从复位向量 (
0x0000_0004
) 重新开始执行。
- 状态保持: 仅备份域寄存器 (RTC, Backup SRAM, Tamper 配置等) 内容保持。主 SRAM 和所有通用寄存器内容丢失。
- 进入方式: 配置
PWR_CR
中的 PDDS
位选择 Standby
模式,设置 CWUF
(清除唤醒标志),配置 PWR_CSR
中的 EWUPx
位使能唤醒引脚,然后执行 WFI
或 WFE
;或设置 SLEEPDEEP
位 + PDDS
+ WFI/WFE
。
- 退出方式: 发生支持的唤醒事件或复位。系统执行完整的复位初始化流程。
-
关机模式 (Shutdown Mode)
- 状态: 电压调节器关闭 (核心电源域断电)。所有时钟关闭 (包括 LSE 和 LSI - 但 LSE 可以 被独立配置为保持运行以驱动 RTC)。SRAM 和寄存器内容丢失 (除了备份域寄存器)。大部分 I/O 引脚进入高阻态或模拟状态。只有备份域 (Backup Domain) 和极低功耗的唤醒逻辑保持供电。这是 最低功耗 的模式。
- 功耗: 最低。典型值:
- LSE 关闭:约 0.03μA
- LSE 开启 (RTC 运行):约 0.7μA
- 唤醒源: 非常有限:
- 特定的唤醒引脚 (
WKUPx
) 上升沿。
- RTC 闹钟事件 (如果 LSE 配置为保持运行 - LSI 在关机模式下不能运行)。
- NRST 引脚外部复位。
- 唤醒时间: 慢 (毫秒级)。唤醒过程相当于一次复位(冷启动)。程序从复位向量 (
0x0000_0004
) 重新开始执行。
- 状态保持: 仅备份域寄存器 (RTC, Backup SRAM, Tamper 配置等) 内容保持。主 SRAM 和所有通用寄存器内容丢失。
- 进入方式: 配置
PWR_CR
中的 LPMS
位选择 Shutdown
模式,设置 CWUF
,配置 PWR_CSR
中的 EWUPx
位使能唤醒引脚,然后执行 WFI
或 WFE
。
- 退出方式: 发生支持的唤醒事件或复位。系统执行完整的复位初始化流程。
关键选择因素总结:
- 需要多快唤醒?
睡眠
/低功耗睡眠
/停机
(快) vs 待机
/关机
(慢/复位)。
- 需要保存 RAM 和寄存器状态吗?
睡眠
/低功耗睡眠
/停机
(保存) vs 待机
/关机
(丢失,仅备份域保留)。
- 需要多低的功耗?
运行
(最高) -> LPRun
-> 睡眠
-> LPSleep
-> 停机
-> 待机
-> 关机
(最低)。
- 唤醒源是什么? 不同模式支持的唤醒源不同 (例如,
待机
/关机
只能用 WKUP 引脚或 RTC 闹钟唤醒)。
- 需要外设在低功耗下工作吗?
睡眠
/LPRun
(外设可用) -> LPSleep
/停机
(仅低功耗外设可用) -> 待机
/关机
(外设完全关闭)。
重要提示:
- 实际功耗: 上述功耗值是典型值,在特定条件下测得(通常是 25°C, VDD=3.0V, 无负载)。实际功耗受温度、供电电压、PCB 设计、未用引脚配置(推荐配置为模拟输入或输出低)、GPIO 外部电路漏电流、开启的外设数量和频率等因素显著影响。务必根据实际电路进行测量。
- 配置细节: 进入和退出每种模式,以及配置唤醒源、时钟、电压调节器、I/O 状态等,都需要仔细配置相关的寄存器 (
PWR
, RCC
, SYSCFG
, GPIO
, EXTI
, NVIC
等)。请务必参考 STM32L051 参考手册 (RM) 的 电源控制 (PWR) 和 复位和时钟控制 (RCC) 章节。
- 调试: 调试器连接通常会阻止微控制器进入深度睡眠模式(如停机、待机、关机)。进行低功耗测试时,可能需要断开调试器,使用 GPIO 翻转或串口输出等方式辅助调试。
- BOR/PVD: 欠压复位 (BOR) 和可编程电压检测器 (PVD) 在低功耗模式下仍然工作,以保护芯片。
- Flash 存储器: 在进入某些深度睡眠模式前(尤其是
待机
/关机
),确保没有正在进行的关键 Flash 操作(擦除/编程)。
理解这些功耗模式及其状态转换是成功设计基于 STM32L051 的超低功耗应用的关键。根据你的应用需求(唤醒频率、唤醒速度、状态保持要求、目标功耗)选择合适的模式组合。