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适合“长期停放、仅需极少数事件唤醒”的场景,例如车辆熄火后长时间静置的节点。
量级对比与选型思路
把五种模式放在同一张“关闭深度轴”上看,规律非常清晰:关闭越深,功耗越低,但唤醒延迟越大、状态保持越少、可用的唤醒源越少。Run到Sleep只关CPU时钟,功耗降一个数量级;Sleep到Stop关高速时钟,再降一到两个数量级;Stop到Standby关主电源域,进入µA级;Standby到Shutdown进入百nA级。工程选型的核心不是“选最省电的”,而是“在满足唤醒延迟和状态保持要求的前提下选最省电的”。
| 模式 | CPU/时钟 | SRAM保持 | 典型唤醒源 | 唤醒延迟 | 功耗量级 |
|---|---|---|---|---|---|
| Run | 全运行 | 是 | 全部 | — | 几十~上百mA |
| Sleep | CPU停,外设跑 | 是 | 任意中断/事件 | 几个周期 | mA级 |
| Stop | 高速时钟关 | 是 | EXTI/RTC/LPUART/CAN | µs级 | 几十~几百µA |
| Standby | 主域关,备份域活 | 否 | WKUP/RTC/IWDG | 复位级 | 1~几µA |
| Shutdown | 最深关断 | 否 | 专用WKUP引脚 | 复位级 | 百nA级 |
进入与退出的关键操作
进入低功耗模式通常分两步:先配置低功耗控制寄存器(选择Stop/Standby/Shutdown并设置相关位),再执行WFI或WFE。以Stop为例,典型流程是:关闭不需要的外设时钟、将未使用IO配置为模拟输入或保持确定电平、使能目标唤醒源(如EXTI线、RTC闹钟)、置位STOP位、执行WFI。唤醒后,若使用HSI作为系统时钟,需等待HSI稳定并重新配置PLL与时钟树;若使用HSE,需等待HSE起振。Standby与Shutdown唤醒后从复位向量执行,因此启动代码中应通过PWR标志位判断唤醒来源,区分“上电复位”与“低功耗唤醒”,再决定是否恢复外设配置。
一个选型示例
假设某车身节点需要在熄火后周期性(每100ms)采集一次传感器并通过CAN上报,同时要求响应延迟不超过1ms。此时若选Standby,唤醒后需重新初始化CAN与时钟,延迟远超1ms,且SRAM丢失需重建数据;若选Sleep,CPU虽停但外设与主时钟仍运行,功耗偏高;Stop是合适选择:RTC或LPTIM定时唤醒,SRAM保持,唤醒后µs级恢复执行,CAN控制器状态可保留。若该节点改为“熄火后仅在被碰撞信号触发时唤醒”,则可选Standby甚至Shutdown,以换取µA乃至百nA级静态功耗。