STM32快速回顾系列(十):PWR电源控制详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、PWR是什么?PWR的电路?PWR的模式?
  • 二、库函数
  • 1.标准库函数
  • 2.示例代码–睡眠模式&串口发送和接收
  • 总结

  • 前言

    像汽车钥匙,遥控器,电子密码锁等以及含有定时开关机等功能的电路,都需要做到不工作时进入省电模式来减少电池的消耗。为此,STM32推出了可以低功耗运行的电源控制模块。PWR;
    PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能


    一、PWR是什么?PWR的电路?PWR的模式?

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



    PVD是来检测2.9V~2.2V左右的电压,可以在这个范围内设置一个警告线,如果低于则触发警告。可以进入中断做一些事情。

    上电掉电复位则是提供一个最低的阈值,如果低于这个阈值则复位。


    PWR的模式分为睡眠模式,停止模式和待机模式;

    睡眠模式
    (1)执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
    (2)SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠,还是等STM32从最低优先级的中断处理程序中退出时进入睡眠
    (3)在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态
    (4)WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
    (5)WFE指令进入睡眠模式,可被唤醒事件唤醒

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

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

    二、库函数


    TIPS: 修改系统主频的方法

    修改主频可以有效的降低功耗。并且在停机模式下唤醒,也需要修改主频到72MHZ (停机模式下唤醒,系统主频由72MHZ降低至36MHZ,需要重新修改主频,否则外设的时序会出错误,运行时间会变长)
    这个需要去system_stm32f10x.c和system_stm32f10x.h 中查看学习
    system_stm32f10x.c中可调用的函数
    在system_stm32f10x.c 文件中有两个外部可调用的函数和一个外部可调用的变量.(可以在头文件中看到。)
    两个函数是SystemInit()和SystemCoreClockUpdate()
    一个变量是SystemCoreClock
    SystemInit() 是用来配置时钟树的,他是在执行main函数之前,在启动文件中调用的。
    SystemCoreClock 表示主频频率的值。如果我们要显示当前频率就可以直接调用显示
    SystemCoreClockUpdate() 更新上边的SystemCoreClock 的值。
    7.2 system_stm32f10x.c中的宏定义
    解除对应的注释,来选择想要的系统主频(带有钥匙的文件无法修改,需要取消文件的只读属性)
    这个if和 lese的意思是:只要你不是VL(超值系列)。就可以配置那么多的主频(lese下边的)


    1.标准库函数

    代码如下:

    void PWR_DeInit(void);恢复缺省配置
    void PWR_BackupAccessCmd(FunctionalState NewState);使能后备区域的访问
    void PWR_PVDCmd(FunctionalState NewState);配置PVD阈值电压
    void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);使能PVD功能
    void PWR_WakeUpPinCmd(FunctionalState NewState);使能位于PA0位置的WKUP引脚。(配合待机模式使用)
    void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);进入停止模式
    指定电压调节器在停止模式中的状态、使用WFI或WFI指令进入
    void PWR_EnterSTANDBYMode(void);进入待机模式
    使用WFI或WFI指令进入
    FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);获取标志位
    void PWR_ClearFlag(uint32_t PWR_FLAG);清除标志位                       
    

    2.示例代码–睡眠模式&串口发送和接收

    代码如下(示例):

    #include "stm32f10x.h"                  // Device header
    #include "Delay.h"
    #include "OLED.h"
    #include "Serial.h"
     
    uint8_t RxData;
     
    int main(void)
    {
    	OLED_Init();
    	Serial_Init();
    	
    	OLED_ShowString(1,1,"RxData:");
     
    	while(1)
    	{
    		if(Serial_GetRxFlag() == 1)
    		{
    			RxData = Serial_GetRxData();
    			Serial_SendByte(RxData);
    			OLED_ShowHexNum(1,8,RxData,2);
    		}
    		OLED_ShowString(2,1,"Running");
    		Delay_ms(100);
    		OLED_ShowString(2,1,"       ");
    		Delay_ms(100);
    		
    		__WFI();//中断唤醒
    		
    	}
    }
    

    睡眠模式下串口发送和接收
    在主循环最后执行WFI,CPU会立刻睡眠,程序停在WFI指令这里,发送数据,USART外设收到数据,产生中断,唤醒CPU,程序在暂停的地方继续运行,先进入中断再回到主循环
    Running闪烁一次,程序在收到数据之后,可以唤醒工作一次,CPU在空闲时睡眠,节约用电
    注:再次下载程序显示下载不成功,所以按住复位键,再按下载键,最后松开复位键才可以下载成功


    总结

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

    在待机模式恢复后,会重头开始执行命令。所以不需要配置时钟了。

    在待机模式下, 1.8V的区域的时钟关闭,电压调节器也关闭。这会使除了备份区域外的所有寄存器清除数据,并且IO口对外呈现为高阻态。

    在进入待机模式之前,一般都需要把所有的外设 都关闭,比如屏幕、电机等等。 否则就无法极度省电

    待机模式会重头开始执行命令,所以不需要再配置时钟了。

    待机模式烧录代码可以按住复位再烧录 (我这里不行,我会断电重上电,在未进入待机模式前开始烧录代码)

    测试WKUP引脚时,只需要函数:PWR_WakeUpPinCmd(ENABLE); 就可以了。程序会自动帮我们把WKUP(PA0)引脚设置为下拉输入的配置,不需要GPIO初始化。

    TIPS: 待机等模式无法下载程序,因为烧录引脚被关闭。方法。一边按复位引脚,一边按KEIL5中烧录按钮,可从新烧录。

    作者:典则

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32快速回顾系列(十):PWR电源控制详解

    发表回复