4. 低功耗模式概述:Sleep、Stop、Standby模式的区别与适用场景
做嵌入式项目,尤其是电池供电的设备,低功耗是绕不开的坎。STM32 提供了三种低功耗模式:Sleep、Stop 和 Standby。很多初学者一上来就懵了——到底该用哪个?
我刚开始做低功耗项目时也踩过坑。有一次做一款便携式传感器,选错了模式,导致设备待机电流居高不下,电池两天就耗光了。后来才搞明白,这三种模式各有各的脾气。
说白了,它们就是处理器在「省电」和「响应速度」之间做的三种不同取舍。下面我带你一个一个看。
4.1 三种模式的核心差异
先看一张对比表,心里有个底:
| 特性 | Sleep 模式 | Stop 模式 | Standby 模式 |
|---|---|---|---|
| CPU 状态 | 停止 | 停止 | 断电 |
| SRAM 保持 | 全部保持 | 全部保持 | 仅备份域 |
| 寄存器状态 | 全部保持 | 全部保持 | 丢失 |
| 外设时钟 | 可关闭 | 全部关闭 | 全部关闭 |
| 唤醒源 | 任意中断/事件 | 特定中断/事件 | WKUP 引脚/RTC/复位 |
| 唤醒时间 | ~1 µs | ~10 µs | ~100 µs 以上 |
| 典型电流 | ~mA 级 | ~µA 级 | ~nA 级 |
你想想看,从 Sleep 到 Standby,省电效果越来越好,但代价是唤醒越来越慢,数据保持越来越少。这就是一个典型的「鱼和熊掌不可兼得」的问题。
4.2 Sleep 模式——最轻量的省电
Sleep 模式是最简单的。CPU 内核停了,但 SRAM、寄存器、外设都还在正常工作。说白了,就是让 CPU 先歇着,外设该干嘛干嘛。
适用场景:
- 需要频繁响应中断,但 CPU 大部分时间在空转
- 对唤醒速度要求极高(微秒级)
- 数据必须完整保持,不能有任何丢失
我在项目中用过 Sleep 模式做数据采集。传感器每 1 毫秒产生一次中断,CPU 只需要花 10 微秒处理数据,剩下 990 微秒都在空转。用 Sleep 模式后,功耗直接降了 60%。
4.3 Stop 模式——功耗与功能的平衡点
Stop 模式就狠一些了。所有时钟都停了,包括 HSI、HSE、PLL。但 SRAM 和寄存器内容还在。唤醒时,系统时钟需要重新稳定,所以比 Sleep 慢一些。
适用场景:
- 需要定期唤醒做任务(比如每秒采集一次数据)
- 数据量不大,但需要保持上下文
- 电池供电设备的主流选择
我曾经做过一个温湿度记录仪,就是用的 Stop 模式。每 10 秒唤醒一次,采集数据后存到 Flash,然后继续睡。一节 CR2032 电池撑了半年多。
4.4 Standby 模式——极致省电
Standby 模式是最省电的,也是最「狠」的。除了备份域(RTC、备份寄存器),整个芯片几乎都断电了。唤醒后,程序从头开始执行,就像按了复位键一样。
适用场景:
- 设备大部分时间处于深度休眠
- 唤醒频率极低(几分钟甚至几小时一次)
- 对功耗要求极其苛刻(nA 级)
我记得有一次做户外环境监测设备,要求电池用一年。最后只能上 Standby 模式,每小时唤醒一次,采集完数据就睡。唤醒电流只有几十纳安,电池几乎不耗电。
4.5 三种模式的选择策略
怎么选?我一般按这个思路来:
- 先看唤醒频率——频率高(毫秒级)选 Sleep,中等(秒级)选 Stop,极低(分钟级以上)选 Standby
- 再看数据保持需求——数据量大且不能丢,选 Sleep 或 Stop;数据可以重新获取,选 Standby
- 最后看唤醒时间要求——对响应速度敏感,选 Sleep;能接受几十微秒延迟,选 Stop;不差那几百微秒,选 Standby
下面这张图能帮你快速决策:
4.6 实际项目中的避坑指南
最后,分享几个我踩过的坑:
- GPIO 状态没处理好——进入低功耗前,GPIO 要设置成合适的电平。我曾经有个引脚悬空,结果在 Stop 模式下产生了额外的漏电流,功耗翻了一倍。
- RTC 时钟源选错——Standby 模式下只有 LSE 或 LSI 能工作。我见过有人用 HSE 分频给 RTC,结果进入 Standby 后 RTC 直接停了。
- 唤醒后忘了重新配置时钟——Stop 模式唤醒后,系统默认跑在 HSI。如果你的外设需要 HSE,记得在唤醒代码里重新使能并切换。
- 调试器影响功耗——接上调试器后,芯片可能无法真正进入低功耗模式。测量功耗时,记得拔掉调试器。