2.43 PWR电源控制

PWR简介

PWR(Power Control)电源控制:

PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。

可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务。

低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间。

我们重点学习的就是这3种低功耗模式,睡眠模式、停机模式和待机模式,低功耗的目的就是省电。

注意:修改主频不属于3种低功耗模式,但是也是降低STM32功耗的一种方法。

电源框图

上电复位和掉电复位

可编程电压检测器

低功耗模式

低功耗模式有3种,睡眠、停机和待机,这三种模式,从上到下关闭的电路越来越多,对应的,从上到下就是越来越省电,同时从上到下也是越来越难唤醒的。

睡眠模式:睡眠模式对电路的影响就是,只把CPU时钟关了,对其他电路没有任何操作,CPU时钟关了,程序就会暂停,不会继续运行了。CPU不运行,芯片功耗就会降低。另外在这里可以看出,关闭电路通常有两个做法,一个是关闭时钟,另一个是关闭电源;关闭时钟,所有的运算和涉及时序的操作都会暂停,但是寄存器和存储器里面保存的数据还可以维持,不会消失。关闭电源,就是电路直接断电,电路的操作和数据都会直接丢失,所以关闭电源比关闭时钟更省电。电压调节器实际上就是1.8V区域的电源,如果电压调节器“关”,就代表直接把1.8V区域断电。

停机模式:SLEEPDEEP位设置为1,PDDS位用来区分是停机模式还是待机模式(PDDS=0停机,PDDS=1待机),LPDS用来设置电压调节器是“开启(0)”还是“低功耗模式(1)”。这时想要唤醒就必须要是外部中断才能唤醒了,值得注意的是,PVD、RTC闹钟、USB唤醒、ETH唤醒借道了外部中断,所以这4个信号也可以唤醒停止模式。停机模式下,不仅CPU不工作了,外设也无法运行了,例如,定时器也会暂停,串口收发数据也会暂停。不过由于没有关闭电源,所以CPU和外设的寄存器数据都是维持原状的。

待机模式:SLEEPDEEP位设置为1,PDDS位置1后调用WFI或者WFE就可以进入待机模式了。普通中断和外部中断都无法唤醒待机模式,待机模式只有几个指定的信号才能唤醒:(1)WKUP引脚的上升沿,WKUP引脚在COT6中是PA0的位置(2)RTC闹钟事件(3)NRST引脚上的外部复位,意思就是按一下复位键,也是能唤醒的(4)IWDG独立看门狗复位。电压调节器也关闭了,意味着内部的存储器和寄存器的数据全部丢失。

低功耗模式选择

WFI和WFE是最终开启低功耗的触发条件,也就是配置其他寄存器,都要在这两个指令之前。

睡眠模式

执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行。(一般我可以在主循环的最后,执行一下WFI/WFE,主循环执行一遍就睡眠,唤醒之后,主循环又会执行一遍,再睡眠。)

SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠。(其实不用太考虑这条,如果你在主程序里执行WFI/WFE那么肯定没有中断,这种情况是你在中断函数里调用WFI/WFE才要考虑的)

在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。(比如如果你在程序里正在点灯,灯点亮了,再进行睡眠,灯仍然是亮的,GPIO引脚的高低电平在睡眠时是维持原样的)

WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒。

WFE指令进入睡眠模式,可被唤醒事件唤醒。(唤醒事件还是比较麻烦的,如果觉得唤醒事件比较麻烦,可以直接使用中断唤醒的方式,还比较简单)

停止模式

执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行。

1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来。

在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。

当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟。(这一条是涉及编程的注意事项,我们的程序默认在SystemInit函数里的配置是使用的HSE外部高速时钟,通过PLL倍频,得到72MHz主频,但是进入停止模式后,PLL和HSE都停止了,而且在退出停止模式时他并不会再自动帮我们开启PLL和HSE,而是默认用HSI的8MHz直接作为主频,所以我们一般在停止模式唤醒后,第一时间就是重新启动HSE,配置主频为72MHz)

当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时。

WFI指令进入停止模式,可被任意一个EXTI中断唤醒。

WFE指令进入停止模式,可被任意一个EXTI事件唤醒。

停止模式只能使用EXTI唤醒,中断模式唤醒WFI,事件模式唤醒WFE。

待机模式

执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行。(因为待机模式直接把内部的大部分电源直接断了,数据都丢失了,唤醒之后程序也无法继续了,只能从头开始)

整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电。

在待机模式下,所有的I/O引脚变为高阻态(浮空输入)。(对于输出来说,既不输出高电平,也不输出低电平,呈现高阻态;对于输入来说,不上拉也不下拉,呈现浮空输入状态)

WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式。