MCU学习笔记_PWR电源管理系统

MCU学习笔记

电源管理系统

1. STM32电源监控器概述
2. STM32电源
3. HAL库配置PVD实例

1. STM32电源监控器概述

  • 原因
  1. 保持系统正常运行
  2. 实现特定条件下的低功耗模式
  • 上电复位(POR)/掉电复位(PDR)

    上电复位是指上电压从无到有在RESET处会先处于高电平一段时间,然后由于该点通过电阻接地,则RESET该点的电平会逐渐的改变为低电平,从而使得单片机复位口电平从1转到0,达到给单片机复位功能的一种复位方式。
    当VDD/VDDA低于指定阈值VPDR/VPOR时,器件无需外部复位,便会保持复位状态。VPDR/VPOR针对于芯片基本上是固定的MCU学习笔记_PWR电源管理系统_第1张图片
    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电压范围复位阈值级别。
    MCU学习笔记_PWR电源管理系统_第2张图片MCU学习笔记_PWR电源管理系统_第3张图片

  • 可编程电压监控器(PVD)
    用来监控电源电压。监控电源电压与所设置的阈值相比较大小,比较的结果会产生一个事件,该事件连接到内部EXTI线16,通过EXTI寄存器使能,如果VDD降至PVD阈值以下或升至阈值以上,则可以产生PVD中断(取决于EXTI线16上升沿/下降沿配置)。

    作用:用于在中断服务程序中执行紧急关闭系统的任务

    使能PVD:PWR_CR.PVDE位

    阈值选择:PWR_CR.PLS[2:0]位

    MCU学习笔记_PWR电源管理系统_第4张图片
    阈值比较结果: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电源
MCU学习笔记_PWR电源管理系统_第5张图片

  • 电池备份域
    VBAT: 后备电池,用于在电源断电后,给唤醒逻辑电路,备份寄存器,备份RAM,LSE电路供电。MCU学习笔记_PWR电源管理系统_第6张图片
  • 调压器
    控制低功耗,用于为备份域以及待机电路以外的所有数字电路供电,如IO口,内核逻辑电路,CPU,数字外设RAM,FLASH等。 输出电压为1.2V或1.8V。
    工作模式
    1. 正常运行:1.2/1.8V域全功率运行;
    2. 停止模式:1.2/1.8V域低功率运行;1.2V域所有时钟关闭,相应外设停止工作,保留内核寄存器以及SRAM内容;
    3. 待机模式: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);//初始化USART
	LED_Init();//初始化LED
	
	PVD_Config();
	while(1)
	{

	}
}

参考资料:正点原子视频 Thanks^^

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


你可能感兴趣的:(MCU学习笔记,#,STM32,嵌入式,stm32,单片机)