第2章 STM32电源系统详解
做低功耗调优,第一件事就是搞清楚芯片怎么“吃电”。
STM32的电源架构,说白了就是几个供电引脚加一个内部电压调节器。我刚开始做低功耗项目时,总觉得这部分是硬件工程师的事。直到有一次,板子休眠电流死活降不下来,查了三天才发现是VREF+引脚没处理好。
嗯,从那以后,我每次画板子都会先翻一遍电源框图。
2.1 STM32供电架构
先看引脚。STM32的供电引脚分四类,各有各的活。
| 引脚 | 供电对象 | 典型电压 | 我的经验 |
|---|---|---|---|
| VDD | 核心逻辑、I/O、内部LDO | 1.8V ~ 3.6V | 主供电,电流最大 |
| VDDA | ADC、DAC、复位电路、PLL | 与VDD相同或略高 | 模拟电路对噪声敏感 |
| VREF+ | ADC/DAC参考电压 | 1.8V ~ VDDA | 很多人忽略这个引脚 |
| VBAT | RTC、备份寄存器 | 1.65V ~ 3.6V | 主电源掉电时靠它 |
你想想看,VDD和VDDA如果分开供电,能有效隔离数字噪声。我在一个工业采集项目中,ADC读数一直跳,后来把VDDA单独用LDO供电,问题就解决了。
2.2 电压调节器:LDO与SMPS
STM32内部有个电压调节器,把外部VDD降到核心电压(通常是1.2V或1.8V)。
主流方案有两种:LDO和SMPS。
- LDO(低压差线性稳压器):简单、噪声低、成本低。但效率也低——输入3.3V输出1.2V,效率只有36%。
- SMPS(开关模式电源):效率高(80%~90%),但外围需要电感和电容,PCB面积大。
我个人习惯:电池供电项目优先选SMPS。记得有个穿戴设备,用LDO时待机电流2mA,换成SMPS后降到0.5mA,续航直接翻倍。
2.3 电源管理单元(PMU)
PMU是STM32的“电闸总控”。它控制着各个电源域的开关和电压等级。
说白了,PMU就是一套硬件状态机,管理芯片在运行、睡眠、停止、待机等模式下的供电策略。
PMU的核心能力是动态电压调节(DVS)。在运行模式下,你可以通过编程选择不同的电压等级(Range 1、Range 2等)。
2.4 电源域划分
STM32把芯片内部划分为多个电源域。每个域可以独立开关。
- VDD域:CPU、Flash、SRAM、大部分外设。这是主域。
- VDDA域:ADC、DAC、PLL、温度传感器。模拟专用。
- 备份域:RTC、备份寄存器、32K晶振。由VBAT供电。
为什么要分域?因为你可以只关掉不用的部分。比如在待机模式下,VDD域完全断电,但备份域还在跑RTC。
我曾经犯过一个错:待机时忘了关ADC的时钟,结果备份域电流多了20μA。后来在初始化里加了一行__HAL_RCC_ADC_CLK_DISABLE(),电流就正常了。
2.5 实战:测量各电源域电流
调优的第一步是测量。我推荐用这种方法:
- 在VDD回路串一个10Ω采样电阻
- 用示波器测电阻两端压降
- 根据I = U/R计算瞬时电流
- 用万用表测平均电流
注意:测量待机电流时,要把示波器探头调到1mV/div档位。我见过有人用10V/div档测微安级电流,结果什么都看不到。