第3章 电源管理单元:SMPS与LDO模式切换、供电域管理、BOR与VREFINT配置
电源管理,说白了就是给芯片“喂饭”的艺术。喂多了浪费,喂少了罢工。STM32L4在这方面给了我们不少选择——SMPS还是LDO?VDD和VDDA怎么分?BOR要不要开?这些配置直接影响你的待机电流和唤醒可靠性。
我个人习惯先把电源架构理清楚,再动手配寄存器。不然出了问题,排查起来很痛苦。
3.1 SMPS与LDO模式切换
STM32L4内部集成了两个电压调节器:LDO(低压差线性稳压器)和SMPS(开关模式电源)。它们给内核逻辑供电,但工作方式完全不同。
| 特性 | LDO模式 | SMPS模式 |
|---|---|---|
| 效率 | 较低(约70%~80%) | 较高(约85%~95%) |
| 纹波 | 低(<10mV) | 较高(20~50mV) |
| 静态电流 | 约1μA | 约5μA |
| 适用场景 | 低噪声模拟、RF | 电池供电、高负载 |
| 外部元件 | 仅需1个电容 | 需电感+电容 |
切换模式通过配置PWR控制寄存器实现。我建议在系统初始化时就确定好,不要在运行时频繁切换——切换过程有短暂电压跌落,容易触发BOR复位。
// 切换到SMPS模式(需外部电感连接在VLX引脚)
HAL_PWR_ConfigSMPS(HAL_PWR_SMPS_ENABLE);
// 切换到LDO模式(默认)
HAL_PWR_ConfigSMPS(HAL_PWR_SMPS_DISABLE);
3.2 VDD与VDDA供电域管理
STM32L4把供电域分成了VDD(数字域)和VDDA(模拟域)。VDD给CPU、Flash、SRAM供电;VDDA给ADC、DAC、比较器、VREFINT供电。
为什么要分开?你想想看,ADC采样时如果数字电路突然翻转,VDD上的噪声会直接耦合到模拟结果里。VDDA独立供电就是为了隔离这个噪声。
实际项目中,我通常这样处理:
- VDD:1.8V~3.6V,由主电源提供
- VDDA:必须≥VDD,且≤3.6V。如果VDD=3.3V,VDDA可以接3.3V或更高(但不能超过3.6V)
- VREF+:ADC参考电压,可以接VDDA或外部基准
3.3 VREFINT与BOR配置
VREFINT:内部参考电压
VREFINT是一个1.2V的带隙基准,给ADC和DAC提供参考。它有两个模式:
- 高精度模式:稳定时间短(约10μs),但功耗高(约10μA)
- 低功耗模式:稳定时间长(约100μs),功耗低(约1μA)
我一般在进入休眠前切换到低功耗模式,唤醒后等100μs再启动ADC。这样既省电又不丢精度。
// 配置VREFINT为低功耗模式
HAL_PWREx_EnableVREFINT(HAL_PWR_VREFINT_LOWPOWER);
// 等待稳定
HAL_Delay(1); // 实际需等待100μs,这里用1ms保险
// 启动ADC采样
HAL_ADC_Start(&hadc1);
BOR:欠压复位
BOR监测VDD电压,当电压低于阈值时自动复位芯片。STM32L4的BOR有7个等级:
| BOR等级 | 下降阈值(V) | 上升阈值(V) |
|---|---|---|
| BOR1 | 1.80 | 1.88 |
| BOR2 | 2.10 | 2.18 |
| BOR3 | 2.40 | 2.48 |
| BOR4 | 2.70 | 2.78 |
| BOR5 | 3.00 | 3.08 |
3.4 电压调节器模式选择
STM32L4的电压调节器有3种模式:
- MR(主调节器):全速运行,功耗最高
- LPR(低功耗调节器):限制CPU频率,适合低负载
- LP(低功耗模式):仅维持SRAM数据,CPU停止
切换逻辑很简单:
// 进入低功耗运行模式(LPR)
HAL_PWREx_EnableLowPowerRunMode();
// 退出低功耗运行模式(回到MR)
HAL_PWREx_DisableLowPowerRunMode();
在LPR模式下,CPU最高只能跑2MHz,但电流能从几十mA降到几百μA。我做过一个传感器采集项目,平时用LPR跑2MHz轮询,有事件触发再切回MR跑80MHz处理数据。整体功耗降低了60%。
3.5 知识结构图:电源管理单元全景
下面这张图把本章的核心关系画清楚了。你可以对照着理解各个模块的协作方式。
嗯,到这里电源管理单元的核心内容就讲完了。记住一句话:选对模式、配好阈值、隔离噪声,你的低功耗设计就成功了一半。