一、电源管理
- STM32 默认VDD供电引脚高于1.72V上电复位,低于1.68V掉电复位。
- 上电电压和掉电电压值是可以配置的,通过修改选项字节,在程序运行前对flash的某些地址做了修改。
- 可编程电压检测器 PVD,会向内核产生一个 PVD 中断(EXTI16 线中断)以使内核在复位前进行紧急处理,使在掉电前在中断中做一些紧急的数据处理。
STM32 的电源系统:
二、低功耗
- STM32 具有运行、睡眠、停止和待机四种工作模式。低功耗平常能用到睡眠模式和停止模式。更多用到的是停止模式,WFI(wait for interrupt),因为中断基本上都是使能后触发,事件的话任意一个外设都有很多事件(比如串口的非空、空闲),睡眠模式就很容易就唤醒了。
- 注意唤醒后默认使用的是内部HSI时钟,需要配置为外部HSE时钟。
1、睡眠模式
- 在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设(GPIO、ADC…),CM4 核心的外设(NVIC、SysTick)全都还照常运行。
- 有两种方式进入睡眠模式,它的进入方式决定了从睡眠唤醒的方式,分别是 WFI(wait for interrupt)和 WFE(wait for event),即由等待“中断”唤醒和由“事件”唤醒。
-比如,DMA_GetFlagStatus()是获取事件,DMA_GetITStatus是获取中断
//进入睡眠模式
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
2、停止模式
- 在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。
- 停止模式可以由任意一个外部中断(EXTI)唤醒。在停止模式中可以选择电压调节器为开模式或低功耗模式,可选择内部 FLASH 工作在正常模式或掉电模式。
- 停止模式关闭了晶振,因此唤醒时需要配置外部晶振,不然会使用内部晶振。
- 调压器可根据情况选择开启还是处于低功耗模式,如果想尽快唤醒,立刻相应外设,可以选择开启的状态。
/* 进入停止模式,设置电压调节器为低功耗模式,等待中断唤醒 */
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
/* 从停止模式唤醒后需要重新配置系统时钟:启用HSE、PLL*/
3、待机模式
- 待机模式,它除了关闭所有的时钟,还把 1.2V 区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测 boot 条件,从头开始执行程序。相当于重启了,因此不常用。
- 它有四种唤醒方式,分别是 WKUP(PA0)引脚的上升沿,RTC 闹钟事件,NRST 引脚的复位和 IWDG(独立看门狗)复位。
STM32电源简图
VDDA:ADC工作电源;
VSSA:ADC独立的地连接;
VREF:引脚则为 ADC 提供测量使用的参考电压;
VDD:1.8V 供电区域电源;
VSS:1.8V 供电区域地;
VBAT:后备供电区域供电,一般此引脚还接着纽扣电池。