PWR电源简介:
- PWR(Power Control)电源控制
- PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能
- 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
- 低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间
电源框图:
黑色部分:模拟部分供电,叫作VDDA(VDD Analog)
VDDA供电区域,主要负责模拟部分的供电,其中包括AD转换,温度传感器,复位模块,PLL锁相环。
这些电路供电正极是VDDA,负极是VSSA
红色部分:数字部分供电,包括两块区域,VDD供电区域和
1.8V供电区域。
左边的VDD供电区域,包括IO电路,待机电路,唤醒逻辑和独立看门狗。
右边部分是VDD通过电压调节器,降压到1.8V,提供给后面的1.8BV供电区域,其中包括CPU核心,存储器,内置数字外设
蓝色部分:后备供电,叫作VBAT(V Battery)
包括LSE 32K晶体震荡器。后备寄存器,RCC BDCR(备份域控制寄存器)和RTC
- 电压检测
- 上电复位/掉电复位
这个意思是:当VDD或VDDA电压过低时,内部电路直接产生复位,让STM32复位住,不要乱操作。
这个复位和不复位的界限之间设置了一个40mv的迟滞电压,大于上限POR(Power On Reset)时解除复位,小于下限(Power Down Reset)时复位。
这是一个典型的迟滞比较器,设置阈值的作用,就是防止电压在某个阈值附近波动时,进行复位操作。
在手册中阈值电压分别是1.88V和1,92V,迟滞电压刚好0.4V
- 可编程电压检测器(PVD):
它(PVD)的工作流程和上面的上电、掉电复位差不多,都是检测VDD和VDDA供电电压。
但时PVD的区别是:
首先它的阈值电压是可以使用程序指定的,可以自定义调节。
*所以这两个总结一下就是:
3.3v是正常供电,当电压降低,然后在2.2v~2.9v之间,属于PVD的监测范围,可以通过PVD设置一个警告线,之后再降低到1.9v
就是到了复位电路的监测范围,低于1.9v,直接复位住,不让动了。这就是这两个电压检测的工作任务。
WFI(Wait For Interrupt、等待中断)
WFE(Wait For Event、等待事件)
介绍中断模式和事件模式:
中断触发响应方式:中断响应/事件响应
中断响应:引脚变化触发中断。
事件响应:不会触发中断,而是触发其他外设操作,属于外设之间的联合工作。
- 睡眠模式(一般省电):
进入方法:直接调用WFI(Wait For Interrupt、等待中断)或者WFE(Wait For Event、等待事件),即可进入
唤醒条件:
WFI的对应唤醒事件是任一中断(任何设备发生任何中断时,芯片都会立刻醒来)。
WFE对应的唤醒事件是产生唤醒事件(就是中断的事件模式)既可以立刻醒来。
睡眠模式的主要作用:
把CPU时钟关闭,程序暂停运行,寄存器数据还在,且较容易唤醒。
- 停机模式(非常省电):
进入方法:
首先,SLEEPDEEP位设置为1
然后,PDDS位用来区分它是停机模式还是待机模式,PDDS=0进入停机模式,PDDS=1进入待机模式。
接着,LPDS位用来设置最后这个电压调节器,是开启,还是进入低功耗模式,LPDS=0,电压调节器开启,LPDS=1,电压调节器进入低功耗
最后当我们把这些位设置好了,直接调用WFI或WFE,芯片就可以进入停止模式了。
唤醒条件:
普通中断无法唤醒,只能是其中任一外部中断可以唤醒。
停止模式的主要操作是:
把运行的高速时钟都关了,CPU和外设,都暂停工作,但是电压调节器并没有关,存储器和寄存器数据可以维持原样;不过唤醒条件比较苛刻,只能通过外部中断唤醒。
- 待机模式(极为省电):
进入方法:
首先,SLEEPDEEP也是置1,
然后PDDS置1,表示将进入待机模式
最后调用WFI或者WFE,就可以进入待机模式了
唤醒条件:
只有特定的信号才能唤醒
WKUP引脚的上升沿、NRST引脚上的外部复位(就是按下复位键)、RTC闹钟事件、IWFG独立看门狗复位
待机模式的主要操作:
把能关的全部关掉,配合RTC和独立看门狗的低速时钟,也可以正常工作。
模式选择图:
上面的树结构是对以上三种模式选择的判断流程的总结;
WFI(等待中断) WFE(等待事件)
介绍中断的中断模式和事件模式:
中断触发响应方式:中断响应/事件响应
中断响应:引脚变化触发中断。
事件响应:不会触发中断,而是触发其他外设操作,属于外设之间的联合工作。
以上是我自己对三种模式的理解;
以下是UP主对三种模式的理解:
- 睡眠模式:
- 执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
- SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠
- 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态
- WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
- WFE指令进入睡眠模式,可被唤醒事件唤醒
- 停止模式:
- 执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
- 1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来
- 在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态
- 当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟
- 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时
- WFI指令进入停止模式,可被任意一个EXTI中断唤醒
- WFE指令进入停止模式,可被任意一个EXTI事件唤醒
- 待机模式:
- 执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行
- 整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电
- 在待机模式下,所有的I/O引脚变为高阻态(浮空输入)
- WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式