STM32学习(PWR电源控制)

1.PWR简介

PWR(Power Control)电源控制
PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能
可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务
低功耗模式包括睡眠模式(Sleep)、停机模式(Stop)和待机模式(Standby),可在系统空闲时,降低STM32的功耗,延长设备使用时间

2.电源框图

        最上面是模拟部分供电,叫做VDDA,中间是数字部分供电,包括两块区域,VDD供电区域和1.8V供电区域,下面是后备供电,叫做VBAT。VDDA供电区域,主要负责模拟部分的供电,其中包括AD转换器、温度传感器、复位模块、PLL锁相环,这些电路的供电正极是VDDA,负极是VSSA,其中ADD转换器,还有两根参考的供电脚,叫做VREF+和VRET-,这两个脚会在引脚多的型号单独引出来,引脚少的,就在内部分别与VDDA和VSSA相连接。中间部分由两部分组成。左边部分是VDD供电区域,其中包括IO电路、待机电路、唤醒逻辑和独立看门狗,右边部分是VDD通过电压调节器,降压到1.8V,提供给后面这一块的1.8V供电区域,1.8V区域包括CPU核心、存储器和内置数字外设,可以看出,STM32的大部分关键电路,CPU、存储器和外设,都是以1.8V的低电压运行的,当这些外设需要与外界交流时,才会通过IO电路转换到3.3V,使用低电压的目的是降低功耗,主要记住,CPU核心、存储器和数字外设都属于1.8V供电区域,而待机电路、唤醒逻辑等,属于VDD供电区域。然后电压调节器,它的作用是给1.8V区域供电。最下面是VBAT后备供电区域,其中包括LSE 32K晶体振荡器、后备寄存器、RCC BDCR寄存器和RTC,RCC BDCR是RCC的寄存器,叫备份域控制寄存器,也是和后备区域有关的寄存器,所以也可以由VBAT供电。然后低电压检测器可以控制开关,ADD有点时,由VDD供电,VDD没电时,由VBAT供电。

3.低功耗模式

3.1 低功耗模式介绍

    睡眠模式,直接调用WFI(等待中断,对应唤醒条件是任意中断)或者WFE(等待事件,对应的唤醒条件是唤醒事件,这个事件可以是外部中断配置为事件模式,也可以是使能了中断,但没有配置NVIC)即可进入,调用WFE进入的睡眠模式,产生唤醒事件时,会立刻醒来,醒来之后,一般不需要进中断函数,直接从睡的地方直接运行,相同点调用之后芯片进入睡眠,不同点是,WFI进入的用中断唤醒,WFE进入的用事件唤醒,睡眠模式对电路的影响是,只把CPU时钟关了,对其他电路没有任何操作,CPU时钟关了程序就会暂停,不会继续运行。

        停机模式,首先SLEEPDEEP位设置为1,另外PDDS这一位,用来区分它是停机模式还是待机模式,PDDS=0进入停机模式,PDDS=1进入待机模式,之后,LPDS用来设置电压调节器,LPDS=0电压调节器开启,LPDS=1电压调节器进入低功耗,最后调用WFI或WFE。唤醒条件是任一外部中断,PVD、RTC闹钟、USB唤醒、ETH唤醒借道了外部中断,所以这4个信号,也可以唤醒停止模式。主要操作就是把运行的高速时钟关了,CPU和外设都暂停工作,但是电压调节器没关,存储器和寄存器数据可以维持原样,它的唤醒条件比较苛刻,只能通过外部中断唤醒。

        待机模式,首先SLEEPDEEP置1,即将深度睡眠,然后PDDS置1,表示即将进入待机模式,最后调用WFI或WFE,就可以进入待机模式了。待机模式,只有指定信号才能唤醒,第一个置WKUP引脚的上升沿,第二个是RTC闹钟事件,第三个是NRST引脚上的外部复位,最后一个是IWDG,独立看门狗复位。主要操作把能关的全关掉,只保留几个唤醒的功能,当然配合RTC和独立看门狗的低速时钟也可以正常工作。

3.2 模式选择

3.3 睡眠模式特性

执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠
在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态
WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
WFE指令进入睡眠模式,可被唤醒事件唤醒(在外设控制寄存器中使能一个中断,而不是在NVIC(嵌套向量中断控制器)中使能,并且在 Cortex-M3系统控制寄存器中使能SEVONPEND位。当MCU从WFE中唤醒后,外设的中断 挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。 配置一个外部或内部的EXIT线为事件模式。当MCU从WFE中唤醒后,因为与事件线对应的 挂起位未被设置,不必清除外设的中断挂起位或外设的NVIC中断通道挂起位)(手册内容)

3.4 停止模式特性

执行完WFI/WFE指令后,STM32进入停止模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
1.8V供电区域的所有时钟都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器内容被保留下来
在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态
当一个中断或唤醒事件导致退出停止模式时,HSI被选为系统时钟
当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时
WFI指令进入停止模式,可被任意一个EXTI中断唤醒
WFE指令进入停止模式,可被任意一个EXTI事件唤醒

3.5 待机模式特性

执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行
整个1.8V供电区域被断电,PLL、HSI和HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电
在待机模式下,所有的I/O引脚变为高阻态(浮空输入)
WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式

3.6 低功耗配置

3.6.1 睡眠模式配置

        只需要在while循环函数最后加__WFI()函数。

3.6.2 停止模式配置

 开启PWR的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 

停止模式和待机模式一定要记得开启

while函数中

进入停止模式,并等待中断唤醒 

PWRSTM32_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);   

唤醒后,要重新配置时钟

SystemInit();               

3.6.3 待机模式配置     

 RTC初始化

MyRTC_Init();

开启PWR的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 

停止模式和待机模式一定要记得开启

使能位于PA0的WKUP引脚,WKUP引脚上升沿唤醒待机模式(也可以用其他3种方式)

PWR_WakeUpPinCmd(ENABLE); 

STM32进入停止模式,并等待指定的唤醒事件(WKUP上升沿或RTC闹钟)PWR_EnterSTANDBYMode();

待机模式唤醒后,程序会重头开始运行

            

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值