1. 低功耗设计总览:STM32低功耗模式概述
做嵌入式开发这么多年,我见过太多产品因为功耗问题翻车。有的设备电池撑不过一周,有的发热严重到外壳变形。说白了,低功耗设计不是锦上添花,而是产品能不能活下去的关键。
这一章,我们先搭个框架。把STM32的几种低功耗模式搞清楚,再聊聊怎么测功耗,最后结合项目需求做个分析。嗯,这些都是后面实战的基础。
1.1 STM32低功耗模式:三种核心选择
STM32的低功耗模式,说白了就是「用性能换功耗」。你让CPU睡得多深,省电就越多。但代价是唤醒时间变长,能用的外设变少。
我个人习惯把三种模式记成三个档位:
| 模式 | 典型电流 | 唤醒时间 | 核心状态 |
|---|---|---|---|
| Sleep(睡眠) | ~mA 级 | ~μs 级 | CPU 停,外设全开 |
| Stop(停止) | ~μA 级 | ~μs 级 | CPU 停,外设可选保留 |
| Standby(待机) | ~nA 级 | ~ms 级 | CPU 停,大部分电路断电 |
你想想看,从 mA 到 nA,差了整整一百万倍。选对模式,比你在代码里抠那几条指令省电多了。
Sleep 模式
这是最浅的睡眠。CPU 内核停了,但所有外设照常跑。我在项目中经常用它做「等待中断」的场景——比如等待串口数据到来,或者等待定时器溢出。唤醒几乎零延迟,适合频繁进出低功耗的场合。
Stop 模式
Stop 模式就狠一些了。CPU 停,系统时钟也停。但你可以选择保留 SRAM 和部分外设的时钟。唤醒需要外部中断或 RTC 闹钟。
我曾经在一个电池供电的传感器节点上用过 Stop 模式。设备每 10 秒醒来一次,采集数据,发完继续睡。平均电流从 5mA 降到了 8μA。嗯,电池寿命从 3 天变成了 6 个月。
Standby 模式
这是最深度的睡眠。除了 RTC 和备份域,几乎全部断电。SRAM 内容丢失,所有寄存器复位。唤醒就像一次复位,程序从头跑。
Standby 的功耗可以低到几十 nA。适合那种「一年唤醒几次」的设备,比如水表、烟感。但代价是唤醒后需要重新初始化所有外设,代码要处理「冷启动」和「热启动」的区别。
Sleep —— 频繁进出,延迟敏感
Stop —— 中等休眠,保留状态
Standby —— 深度休眠,极致省电
1.2 功耗测量基础:你得知道怎么测
做低功耗设计,没有测量数据就是瞎猜。我见过太多人「感觉功耗很低」,结果一上示波器傻眼了。
测量功耗,我建议分三步走:
- 静态电流测量 —— 用万用表串进电源,测平均电流。适合看 Standby 和 Stop 的底电流。
- 动态电流波形 —— 用示波器配合电流探头,看设备从唤醒到工作再到睡眠的完整波形。适合分析峰值和持续时间。
- 能量积分 —— 把电流波形对时间积分,算出一段时间内的总能耗。这才是真正的「省不省电」指标。
另外,别忘了测量路径上的压降。如果电源线太细,或者用了长跳线,IR drop 会让你的测量结果偏小。嗯,这个坑我也踩过。
1.3 项目需求分析:从需求倒推方案
低功耗设计不是越省电越好。你得先搞清楚:
- 设备多久工作一次?
- 每次工作多久?
- 电池容量多大?
- 目标寿命多长?
举个例子。假设我们要做一个无线温度传感器:
| 参数 | 值 |
|---|---|
| 工作间隔 | 60 秒 |
| 每次工作时间 | 200 ms |
| 工作电流 | 20 mA |
| 休眠电流 | 5 μA |
| 电池容量 | 2000 mAh |
算一下平均电流:
平均电流 = (20mA × 0.2s + 0.005mA × 59.8s) / 60s
≈ 0.0717 mA
电池寿命 ≈ 2000 mAh / 0.0717 mA ≈ 27890 小时 ≈ 3.18 年
这个结果够不够?如果客户要求 5 年,那你就得想办法把休眠电流降到 1 μA 以下,或者拉长工作间隔。这就是需求倒推设计的过程。
1.4 本章知识体系
下面这张图,把本章的核心逻辑串起来了。你可以把它当成后续章节的导航图。
这张图你看懂了吗?从上到下,先明确目标,再选模式,最后用测量和需求分析来闭环。后面的章节,我们会沿着这个框架一步步深入。
- 三种低功耗模式:Sleep(μs 唤醒)、Stop(μA 级)、Standby(nA 级)
- 功耗测量要分静态、动态、积分三步走
- 需求分析先算平均电流,再倒推方案
- 没有测量数据,不要谈低功耗优化
嗯,这一章就到这里。框架搭好了,后面每一章都会在这个框架里填具体的代码和电路。准备好了吗?