3. 低功耗模式全景

ST车规MCU(以SPC5、Stellar、STM32A等系列为典型代表)的低功耗设计并不是“一个省电开关”,而是一组按“关闭深度”排列的工作模式。理解这些模式,关键是抓住四条主线:CPU与时钟是否运行、哪些电源域仍供电、SRAM/寄存器内容是否保持、哪些事件能把芯片唤醒。功耗量级、唤醒延迟和状态保持范围,本质上都是这四条主线的结果。

下面按“由浅到深”的顺序梳理各模式的定义、进入退出条件、唤醒源与状态保持范围,并在最后给出量级对比与选型思路。

Run:全速运行,功耗最高但功能完整

Run是芯片的默认工作状态:内核、总线、外设时钟全部可用,Flash/RAM正常供电,所有唤醒源都处于可响应状态。此时功耗最高,通常在几十mA到上百mA量级(取决于主频、外设开启数量与外设时钟)。Run本身不是“低功耗模式”,但它是所有低功耗模式的起点和退出目标。进入条件:复位释放后自动进入,或从任意低功耗模式被唤醒后回到Run。退出条件:执行WFI/WFE或写低功耗控制寄存器进入更深模式。

Sleep:停CPU,外设继续跑

Sleep模式只关闭CPU时钟,内核停止取指与执行,但总线矩阵、SRAM、Flash以及已使能的外设时钟继续工作。因此Sleep的唤醒延迟极短(通常几个时钟周期),适合“CPU等外设”的场景,例如等待ADC转换完成、等待DMA搬运结束、等待CAN报文。进入条件:执行WFI(Wait For Interrupt)或WFE(Wait For Event),且未置位更深的低功耗位。唤醒源:任意使能的中断或事件,包括SysTick、EXTI、外设中断。状态保持:全部SRAM与寄存器保持,程序从WFI下一条指令继续执行。功耗量级通常在mA级,比Run低一个数量级左右,但远高于Stop。

Stop:关时钟,保SRAM,唤醒快

Stop模式关闭高速时钟(PLL、HSI/HSE主时钟),CPU与大部分外设停止,但SRAM和寄存器内容保持,部分低速外设(如RTC、LPTIM、LPUART、IWDG)可由LSI/LSE继续驱动。Stop是车规MCU中最常用的“待机但需快速响应”模式:唤醒延迟通常在微秒级,唤醒后可从SRAM继续执行,无需重新初始化。进入条件:置位低功耗控制寄存器中的STOP位后执行WFI/WFE。唤醒源:EXTI外部中断、RTC闹钟、LPTIM、LPUART接收、CAN唤醒(视系列)、IWDG复位等。状态保持:SRAM与备份寄存器保持,IO状态保持,但主时钟需重新稳定。功耗量级通常在几十µA到几百µA。

Standby:只留备份域,唤醒相当于复位

Standby模式关闭主电源域(VDD域),仅保留备份域(VBAT域):RTC、备份寄存器、少量唤醒逻辑继续工作。SRAM内容丢失,唤醒后程序从复位向量重新执行,相当于一次上电复位(但可通过备份寄存器或标志位判断唤醒来源)。进入条件:置位STANDBY位并执行WFI/WFE,或由内部/外部条件触发。唤醒源:WKUP引脚、RTC闹钟、IWDG复位、外部复位等。状态保持:仅备份寄存器与RTC保持,普通SRAM与IO状态丢失。功耗量级通常在1µA到几µA。

Shutdown:最深关断,仅保留极少数唤醒逻辑

Shutdown是部分ST车规MCU提供的更深模式:连备份域的大部分电路也关闭,仅保留极少数唤醒引脚或专用唤醒逻辑。SRAM、RTC、备份寄存器均可能丢失,唤醒后同样从复位开始。进入条件:置位SHUTDOWN位并执行WFI/WFE。唤醒源:通常仅限专用WKUP引脚或特定外部事件。功耗量级可低至百nA级。Shutdown适合“长期停放、仅需极少数事件唤醒”的场景,例如车辆熄火后长时间静置的节点。

ST车规MCU低功耗模式:关闭深度 / 状态保持 / 唤醒源 / 功耗量级 Run CPU / 总线 / 外设 全部运行 SRAM / 寄存器 全部保持 唤醒源:全部 唤醒延迟:— 功耗:几十mA ~ 上百mA WFI/WFE 进入更深 模式 复位后默认状态 所有模式退出目标 Sleep CPU 停,外设继续 总线 / SRAM 供电 SRAM / 寄存器 全部保持 唤醒源:任意中断 / 事件 唤醒延迟:几个周期 功耗:mA 级 WFI / WFE 进入 适合:等 ADC / DMA / CAN 报文 从 WFI 下一条继续 Stop 高速时钟关闭 RTC/LPTIM 可运行 SRAM / 寄存器 保持 唤醒源:EXTI / RTC / LPUART / CAN 唤醒延迟:µs 级 功耗:几十µA ~ 几百µA 置 STOP 位 + WFI 适合:待机但需 快速响应 主时钟需重新稳定 Standby 主电源域关闭 仅备份域工作 SRAM 丢失 备份寄存器保持 唤醒源:WKUP / RTC / IWDG 唤醒延迟:复位级 功耗:1µA ~ 几µA 置 STANDBY 位 + WFI/WFE 唤醒后从复位向量 重新执行 Shutdown 最深关断 仅极少数唤醒逻辑 SRAM / RTC 均可能丢失 唤醒源:专用 WKUP 引脚 唤醒延迟:复位级 功耗:百 nA 级 置 SHUTDOWN 位 + WFI/WFE 适合:长期停放 极少数事件唤醒 关闭深度增加 → 功耗降低 → 唤醒延迟增大 → 状态保持减少

量级对比与选型思路

把五种模式放在同一张“关闭深度轴”上看,规律非常清晰:关闭越深,功耗越低,但唤醒延迟越大、状态保持越少、可用的唤醒源越少。Run到Sleep只关CPU时钟,功耗降一个数量级;Sleep到Stop关高速时钟,再降一到两个数量级;Stop到Standby关主电源域,进入µA级;Standby到Shutdown进入百nA级。工程选型的核心不是“选最省电的”,而是“在满足唤醒延迟和状态保持要求的前提下选最省电的”。

模式CPU/时钟SRAM保持典型唤醒源唤醒延迟功耗量级
Run全运行是全部—几十~上百mA
SleepCPU停,外设跑是任意中断/事件几个周期mA级
Stop高速时钟关是EXTI/RTC/LPUART/CANµs级几十~几百µA
Standby主域关,备份域活否WKUP/RTC/IWDG复位级1~几µA
Shutdown最深关断否专用WKUP引脚复位级百nA级
表中功耗量级为典型范围,实际值受主频、外设开启数量、IO状态、温度、供电电压及具体型号影响,应以对应芯片数据手册的电气特性表为准。

进入与退出的关键操作

进入低功耗模式通常分两步:先配置低功耗控制寄存器(选择Stop/Standby/Shutdown并设置相关位),再执行WFI或WFE。以Stop为例,典型流程是:关闭不需要的外设时钟、将未使用IO配置为模拟输入或保持确定电平、使能目标唤醒源(如EXTI线、RTC闹钟)、置位STOP位、执行WFI。唤醒后,若使用HSI作为系统时钟,需等待HSI稳定并重新配置PLL与时钟树;若使用HSE,需等待HSE起振。Standby与Shutdown唤醒后从复位向量执行,因此启动代码中应通过PWR标志位判断唤醒来源,区分“上电复位”与“低功耗唤醒”,再决定是否恢复外设配置。

常见误区:一是进入Stop前未关闭调试接口时钟,导致调试器连接时无法进入低功耗;二是未处理未使用IO,浮空输入在低功耗下可能因电平翻转产生额外漏电;三是误以为Standby能保持SRAM,唤醒后直接访问变量导致数据错误。进入前应逐项确认时钟、IO、唤醒源与状态保持需求。

一个选型示例

假设某车身节点需要在熄火后周期性(每100ms)采集一次传感器并通过CAN上报,同时要求响应延迟不超过1ms。此时若选Standby,唤醒后需重新初始化CAN与时钟,延迟远超1ms,且SRAM丢失需重建数据;若选Sleep,CPU虽停但外设与主时钟仍运行,功耗偏高;Stop是合适选择:RTC或LPTIM定时唤醒,SRAM保持,唤醒后µs级恢复执行,CAN控制器状态可保留。若该节点改为“熄火后仅在被碰撞信号触发时唤醒”,则可选Standby甚至Shutdown,以换取µA乃至百nA级静态功耗。