1. 低功耗概述:为什么需要低功耗?
各位同学,咱们开始这门课之前,先聊一个最根本的问题——为什么要低功耗?
我入行那会儿,做第一个电池供电的项目,选了个普通STM32F1。产品做出来,两节AA电池撑了不到三天。客户直接退货。嗯,从那以后,我对功耗这件事就再也不敢马虎了。
1.1 低功耗的驱动力
说白了,低功耗不是锦上添花,而是很多产品的生死线。你想想看,下面这些场景,哪个离得开低功耗?
- 电池供电设备:智能手表、传感器节点、医疗贴片。换电池?不现实。
- 能量采集系统:靠太阳能、振动发电。功耗高了直接罢工。
- 热管理敏感产品:密闭空间里的设备,功耗高=发热高=死机。
- 长期待机设备:烟雾报警器、门锁。一待就是几年。
核心观点:低功耗设计,本质是在性能和能耗之间找平衡。不是越省电越好,而是“够用且省电”。
1.2 STM32L4系列低功耗特性概览
STM32L4系列,是ST专门为低功耗场景打造的。我最早用L4做一款工业传感器,待机电流做到1.6µA,配合一个500mAh的电池,理论待机超过35年。当然,实际还要考虑自放电和温度,但已经很惊人了。
L4系列的核心低功耗特性,我整理了一张表:
| 特性 | 说明 | 典型数值 |
|---|---|---|
| 多种低功耗模式 | Sleep、Low-power Run、Stop 0/1/2、Standby、Shutdown | 从mA级到nA级 |
| FlexPowerControl | 独立控制每个外设的时钟和电源 | 按需供电 |
| SMPS降压转换器 | 内置DC-DC,效率比LDO高 | 效率可达90%+ |
| LPUART / LPTIM | 低功耗串口和定时器,可在Stop模式下工作 | µA级运行 |
| RTC + 备份寄存器 | VBAT引脚独立供电,保存时间和数据 | ~1µA |
| 快速唤醒 | 从Stop模式唤醒只需几个微秒 | ~5µs |
个人经验:L4的Stop 2模式是我最常用的。它保留了SRAM和大部分寄存器,唤醒快,功耗又低。做间歇性采样的项目,这个模式是首选。
1.3 低功耗设计的基本原则
这部分是我这些年踩坑踩出来的。你记住这几条,至少能少走一半弯路。
原则一:从系统层面规划功耗
别一上来就盯着单片机。先算清楚:整个系统的功耗预算。传感器、无线模块、电源转换效率,这些往往比MCU本身更耗电。
- 先列清单:每个器件的工作电流和休眠电流
- 算占空比:设备工作多久,休眠多久
- 定电池:根据平均电流选电池容量
原则二:时钟和电压能降就降
功耗和频率成正比,和电压的平方成正比。这是物理定律。
- 不需要高速时,降频。L4可以动态调整HCLK。
- 能跑1.8V就别跑3.3V。L4的Vcore有多个范围。
- 用内部低速时钟(LSI/LSE)代替高速时钟(HSE/HSI)。
避坑指南:我曾经在一个项目里,为了省事把所有外设时钟都开着。结果休眠电流多了200µA。排查了两天才发现,是SPI的时钟没关。记住:不用就关。
原则三:外设按需供电
L4的每个GPIO和外设都可以独立控制时钟和电源。别偷懒。
- GPIO设为模拟模式最省电,因为数字输入缓冲器被关闭。
- 不用的外设,调用
HAL_xxx_DeInit()彻底关闭。 - 使用DMA代替CPU搬运数据,CPU可以睡大觉。
原则四:选择合适的低功耗模式
L4提供了7种低功耗模式。别一上来就上Shutdown,要根据唤醒源和唤醒时间选。
| 模式 | 典型电流 | 唤醒时间 | 适用场景 |
|---|---|---|---|
| Sleep | ~mA级 | ~ns | CPU空闲,外设继续工作 |
| Low-power Run | ~500µA | — | 低速持续处理 |
| Stop 0/1/2 | ~10µA | ~5µs | 间歇性采样,保留SRAM |
| Standby | ~0.3µA | ~50µs | 长时间待机,仅RTC运行 |
| Shutdown | ~10nA | ~200µs | 极低功耗,复位唤醒 |
我的习惯:做原型时,先跑一个功耗基线测试。把所有外设关掉,只留MCU,测一下各个模式的电流。这样后面加外设,功耗多了多少一目了然。
1.4 本章知识体系
下面这张图,把本章的核心逻辑串起来了。你保存好,后面每章都会用到。
这张图把本章三个核心模块串起来了:驱动力告诉你为什么做,L4特性告诉你有什么工具,设计原则告诉你怎么做。后面每一章,都会围绕这张图展开。