本文主要是介绍MCU学习笔记_PWR电源管理系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MCU学习笔记
电源管理系统
1. STM32电源监控器概述
2. STM32电源
3. HAL库配置PVD实例
1. STM32电源监控器概述
- 原因
- 保持系统正常运行
- 实现特定条件下的低功耗模式
-
上电复位(POR)/掉电复位(PDR)
上电复位是指上电压从无到有在RESET处会先处于高电平一段时间,然后由于该点通过电阻接地,则RESET该点的电平会逐渐的改变为低电平,从而使得单片机复位口电平从1转到0,达到给单片机复位功能的一种复位方式。
当VDD/VDDA低于指定阈值VPDR/VPOR时,器件无需外部复位,便会保持复位状态。VPDR/VPOR针对于芯片基本上是固定的。
VDD: 0~VPOR(典型值1.72V):上电复位
VDD持续上升时间:
正常运行状态:
下降至VPDR:掉电复位 -
欠压复位(BOR)
单片机的“电量不足”是电源电压不足或暂时降低,低于可靠运行所需的水平。许多单片机具有保护电路,该电路可检测电源电压何时低于此水平,并将设备置于复位状态,以确保在电源恢复时正确启动。此操作也称为“欠压复位”,英文缩写为“BOR”。
上电期间,欠压复位(BOR)将使期间保持复位状态,直到电源电压达到指定的VBOR阈值。VBOR通过器件选项字节进行配置。BOR默认关闭,当VDD降低至所选VBOR时,使器件复位。
配置BOR选项级别:通过flash选项控制寄存器(FLASH_OPTCR)
BOR_LEV=11: BOR关闭(VBOR0):1.8V到2.1V电压范围复位阈值级别。
BOR_LEV=10: BOR级别1(VBOR1):2.1V到2.4V电压范围复位阈值级别。
BOR_LEV=01: BOR级别2(VBOR2):2.4V到2.7V电压范围复位阈值级别。
BOR_LEV=00: BOR级别3(VBOR3):2.7V到3.6V电压范围复位阈值级别。
-
可编程电压监控器(PVD)
用来监控电源电压。监控电源电压与所设置的阈值相比较大小,比较的结果会产生一个事件,该事件连接到内部EXTI线16,通过EXTI寄存器使能,如果VDD降至PVD阈值以下或升至阈值以上,则可以产生PVD中断(取决于EXTI线16上升沿/下降沿配置)。作用:用于在中断服务程序中执行紧急关闭系统的任务
使能PVD:PWR_CR.PVDE位
阈值选择:PWR_CR.PLS[2:0]位
阈值比较结果:PWR_CSR.PVDO位 -
HAL库操作函数
//配置PVD参数:阈值级别和中断触发方式
void HAL_PWR_ConfigPVD(PWR_PVDTypeDef*sConfigPVD);
//使能PVD
void HAL_PWR_EnablePVD(void);
//失能PVD
void HAL_PWR_DisablePVD(void);
//中断服务函数
void HAL_PWR_PVD_IRQHandler(void);
//中断回调函数
void HAL_PWR_PVD_Callback(void);
2. STM32电源
- 电池备份域
VBAT: 后备电池,用于在电源断电后,给唤醒逻辑电路,备份寄存器,备份RAM,LSE电路供电。 - 调压器
控制低功耗,用于为备份域以及待机电路以外的所有数字电路供电,如IO口,内核逻辑电路,CPU,数字外设RAM,FLASH等。 输出电压为1.2V或1.8V。
工作模式:- 正常运行:1.2/1.8V域全功率运行;
- 停止模式:1.2/1.8V域低功率运行;1.2V域所有时钟关闭,相应外设停止工作,保留内核寄存器以及SRAM内容;
- 待机模式:1.2/1.8V域断电;内核寄存器以及SRAM内容的内容全部丢失,备份区域的寄存器以及SRAM不收影响。
- 独立A/D转换器电源以及参考电压
ADC的独立电源(VDDA, VSSA引脚),用于提高转换精度,可以单独滤波并屏蔽PCB上的噪音。
3. HAL库配置PVD实例
#include "exti.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "exti.h"PVDTypeDef pvd_config;void PVD_Config(void)
{
/*********************************
//使能PWR时钟
*********************************/
__HAL_RCC_PWR_CLK_ENABLE(); /*********************************
//配置PVD参数:阈值级别和中断触发方式
*********************************/
pvd_config.PVDLevel=PWR_PVDLEVEL_7;//2.9v
pvd_config.PVDMode=PWR_PVD_MODE_IT_RISING_FALLING;HAL_PWR_ConfigPVD(&pvd_config);/*********************************//使能PVD
*********************************/HAL_PWR_EnablePVD();/*********************************
设置后中断优先级
*********************************/
HAL_NVIC_EnableIRQ(PVD_IRQn); //
HAL_NVIC_SetPriority(PVD_IRQn,0,0);//
}/*********************************
//中断服务函数
*********************************/
void PVD_IRQHandler(void)
{HAL_PWR_PVD_IRQHandler();
}/*********************************
//中断回调函数
*********************************/
void HAL_PWR_PVD_Callback(void)
{LED=0;LED=1;
}/*********************************
主函数
*********************************/int main(void)
{HAL_Int();//初始化HAL库Stm32_Clocu_Init(360,25,2,8);//设置时钟delay_init(180);//初始化延时uart_int(115200);//初始化USARTLED_Init();//初始化LEDPVD_Config();while(1){}
}
参考资料:正点原子视频 Thanks^^
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~
这篇关于MCU学习笔记_PWR电源管理系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!