电源管理基础:STM32供电架构

做低功耗设计,第一件事就是搞清楚芯片怎么“吃电”。

STM32的供电架构,说白了就是三路电源输入加一个内部电压调节器。我刚开始接触时也觉得这有什么好学的?不就是VDD接3.3V嘛。直到有一次做电池产品,发现待机电流死活降不下去……后来一查,是VBAT引脚没处理好。

嗯,咱们今天就把这块彻底捋清楚。

3.1 三路电源输入:VDD / VDDA / VBAT

STM32芯片上有三个主要的电源引脚族,各管各的活:

电源域 典型电压 供电对象 低功耗关键点
VDD 1.8V ~ 3.6V 数字核心、I/O、Flash、SRAM 主电源,休眠时可关闭
VDDA 1.8V ~ 3.6V ADC、DAC、复位电路、PLL、RC振荡器 模拟电路专用,噪声敏感
VBAT 1.65V ~ 3.6V RTC、备份寄存器、备份SRAM VDD掉电后维持计时与数据
注意:VDDA必须 ≤ VDD,否则芯片内部ESD二极管会正向导通,轻则漏电,重则烧芯片。我见过有人把VDDA单独接3.3V、VDD接1.8V,结果芯片直接冒烟。

这里有个容易忽略的点:VBAT。很多工程师觉得不用RTC就不接VBAT,直接悬空。但悬空状态下,VBAT引脚内部的电源切换电路会反复比较VDD和VBAT电压,产生额外漏电流。我建议:如果不使用RTC,把VBAT直接接到VDD上,反而更省电。

3.2 电压调节器:LDO vs SMPS

STM32内部有一个核心电压调节器,把外部VDD(比如3.3V)降到内核电压(通常是1.2V或1.8V)。这个调节器有两种实现方式:

  • LDO(低压差线性稳压器):传统方案,结构简单,纹波小。但效率低——3.3V转1.2V,效率只有36%。多出来的能量全变成热量。
  • SMPS(开关模式电源):部分STM32U5、L5系列内置。效率可达80%~90%,但纹波稍大,PCB布局要求更高。

怎么选?我个人的经验法则:

  • 如果产品用电池供电,且大部分时间处于休眠模式,选LDO。因为休眠时电流只有几微安,SMPS自身的开关损耗反而占大头。
  • 如果产品持续运行(比如数据采集、电机控制),电流在mA级以上,选SMPS。省下来的能量很可观。
小技巧:STM32U5系列支持动态切换LDO和SMPS。运行时用SMPS,进入Stop模式前切到LDO。我上一个项目就这么干的,待机电流从12μA降到了3.5μA。

3.3 电源域划分:Vcore、VDDIO、备份域

STM32内部把电路分成几个独立的电源域,每个域可以单独开关。理解这个划分,是低功耗设计的基础。

STM32电源域划分示意图 VDDIO 域 I/O引脚 复用功能 外部中断 唤醒逻辑 由VDD供电,休眠时保持 Vcore 域 CPU核心 Flash / SRAM DMA / 总线矩阵 数字外设 由内部LDO/SMPS供电 备份域 RTC 备份寄存器 (20×32位) 备份SRAM (可选) 由VBAT供电,VDD掉电不丢失 VDD VDD → LDO/SMPS VBAT 休眠时Vcore域断电,VDDIO域保持,备份域由VBAT独立供电

三个域的关系,我用一句话总结:Vcore是干活的主力,VDDIO是看门的保安,备份域是永不关机的老黄牛。

进入Stop模式时,Vcore域的时钟和电压都会被关掉,但VDDIO域保持供电,这样外部中断才能唤醒芯片。备份域则完全独立,即使主电源断了,只要VBAT有电,RTC和备份寄存器就不会丢。

实战经验:我在做一款智能门锁时,需要记录开锁日志。主控用STM32L051,VDD接3.3V电池,VBAT接一个CR2032纽扣电池。每次开锁记录写入备份寄存器,主电源掉电后日志不丢。待机电流只有1.2μA,一节CR2032能用两年。

3.4 电压调节器的工作模式

STM32的电压调节器(无论是LDO还是SMPS)有几种工作模式,直接影响功耗:

模式 输出电压 适用场景 典型电流
Range 1 1.2V 高性能运行,CPU频率最高 高
Range 2 1.0V 中等性能,降低功耗 中
Range 3 0.9V 低性能,最低功耗运行 低
低功耗模式 关闭 Stop / Standby 模式 接近0

这里有个坑:电压越低,CPU能跑的最高频率也越低。Range 3下,HCLK最高只能到2MHz。如果你在Range 3下试图跑32MHz,芯片会直接HardFault。我曾经在调试时遇到过,查了半天才发现是电压域配置错了。

建议:用HAL库的HAL_PWREx_ControlVoltageScaling()函数动态切换电压范围。跑任务时用Range 1,空闲时切到Range 3。切换前记得降低系统时钟频率,否则会死机。

3.5 实际项目中的供电设计要点

最后,分享几个我在项目中踩过的坑:

  • 去耦电容不能省:每个VDD/VSS对之间放一个100nF陶瓷电容,靠近引脚。VDDA要额外加一个10μF钽电容。省电容省出来的钱,不够修一次EMC问题。
  • VBAT的防倒灌:如果VBAT接了电池,VDD上电时电流会通过内部二极管倒灌进电池。加一个肖特基二极管(如BAT54)串联在VBAT引脚上,阳极接电池,阴极接VBAT。
  • SMPS的布局:如果用了内置SMPS的型号(如STM32U5),电感要靠近芯片,反馈走线要短。我见过有人把电感放在板子另一面,结果纹波大到ADC没法用。
  • 测量电流的方法:不要用万用表直接串在电源上测休眠电流。万用表的采样电阻会引入压降,导致芯片复位。用电流探头或串联1Ω电阻测压降更靠谱。
避坑指南:我曾经在一个产品中用了STM32L4的SMPS模式,PCB布局时没注意电感位置,结果SMPS的开关噪声耦合到了VDDA,ADC的ENOB从12位掉到了9位。后来重新布局,把电感移到板边,远离模拟区,问题才解决。

供电架构是低功耗设计的根基。搞懂了VDD、VDDA、VBAT怎么接,LDO和SMPS怎么选,电源域怎么划分,后面讲时钟、外设、休眠模式时才能游刃有余。嗯,今天就先到这里。