STM32 PVD掉电检测功能的使用方法
创始人
2025-01-11 14:07:07
0

STM32 PVD掉电检测功能的使用方法

目录

  • STM32 PVD掉电检测功能的使用方法
    • 前言
    • 1 PVD简介
      • 1.1 工作原理
      • 1.2 软件配置步骤
      • 1.3 注意事项
    • 2 程序编写
    • 结束语

前言

在实际应用场景中,可能会出现设备电源电压异常下降或掉电的情况,因此,有时候需要检测设备是否掉电,或者在设备掉电的瞬间做一些紧急关机处理,比如保存重要的用户数据,记录运行时间,紧急通知其他平台等等。

1 PVD简介

1.1 工作原理

STM32本身内置了一种掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检测器。
其原理是通过PVD监测电压变化,并提前设定好一个基准电压,当芯片的供电电压高于或低于该基准电压时便产生PVD中断,在PVD中断里面就可以做一些紧急处理。

PVD门限阀值如下图所示:
在这里插入图片描述

1.2 软件配置步骤

1、初始化配置PVD参数。
2、在中断函数加入紧急处理代码。

PVD参数具体配置如下:
通过配置电源/状态控制寄存器(PWR_CSR)和电源控制寄存器(PWR_CR)来监控电源电压。

电源控制寄存器(PWR_CR)如下:
在这里插入图片描述

其中,PLS[2:0]这几位选择监控电压的阀值。PVDE位用来使能PVD。

电源/状态控制寄存器(PWR_CSR)如下:
在这里插入图片描述

其中,PVDO标志用来表明VDD是高于还是低于PVD的电压阀值。

PVD事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。通过这一特性可将PVD用于用于执行紧急关闭任务。
在这里插入图片描述

1.3 注意事项

1、如果项目使用了多个外设中断,要注意PVD中断的优先级。
2、注意紧急处理代码的执行时间,要在MCU电压降到完全不能工作前执行完(可以通过调整PVD阈值电压,或者在MCU供电电源处加大电容以延缓掉电时间)。
3、PVD的阀值触发有100mV的迟滞(可能是为了消抖,详见上面的PVD门限阀值图),因此,设置阀值时最好留一点余量。
4、如果PVD中断触发方式使用上升下降沿触发,在电压不稳定的情况下可能会反复触发中断,此时可以通过设置标志位来保证紧急代码只运行1次。

2 程序编写

参考测试代码:

/**   * @brief  This function handles the PVD Output interrupt request.   * @param  None   * @retval None   */ void PVD_IRQHandler(void) {     if(EXTI_GetITStatus(EXTI_Line16) != RESET)     {         /* 掉电时运行的紧急代码 */         printf("low power.\n");          /* Clear the Key Button EXTI line pending bit */         EXTI_ClearITPendingBit(EXTI_Line16);     } }  /**   * @brief  Configures EXTI Lines.   * @param  None   * @retval None   */ void EXTI_Configuration(void) {     EXTI_InitTypeDef EXTI_InitStructure;      /* Configure EXTI Line16(PVD Output) to generate an interrupt on rising and falling edges */     EXTI_ClearITPendingBit(EXTI_Line16);     EXTI_InitStructure.EXTI_Line = EXTI_Line16;     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;     EXTI_InitStructure.EXTI_LineCmd = ENABLE;     EXTI_Init(&EXTI_InitStructure); }  /**   * @brief  Configures NVIC and Vector Table base location.   * @param  None   * @retval None   */ void NVIC_Configuration(void) {     NVIC_InitTypeDef NVIC_InitStructure;      /* Configure one bit for preemption priority */     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);      /* Enable the PVD Interrupt */     NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     NVIC_Init(&NVIC_InitStructure); }  void PVD_Init(void) {         /* Enable PWR and BKP clock */     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);     /* Configure EXTI Line to generate an interrupt on falling edge */     EXTI_Configuration();     /* NVIC configuration */     NVIC_Configuration();     /* Configure the PVD Level to 2.9V */     PWR_PVDLevelConfig(PWR_PVDLevel_2V9);     /* Enable the PVD Output */     PWR_PVDCmd(ENABLE); }  int main(void) {          uart_init(115200);     PVD_Init();     printf("init success.\n");     while (1)     {     } } 

示例代码测试结果:
在这里插入图片描述

结束语

上面的测试例子只是给大家做一个参考,实际上需要根据项目的具体需求去补充细节,这里就不再多说了。
好了,关于STM32如何使用PVD掉电检测功能就介绍到这里,如果你们还有什么问题,欢迎评论区留言。

如果这篇文章能够帮到你,就…懂的。
请添加图片描述

相关内容

热门资讯

黑科技辅助!wpk辅助神器(透... 黑科技辅助!wpk辅助神器(透视)软件透明辅助挂(本来是真的有挂)-哔哩哔哩是一款可以让一直输的玩家...
5分钟了解“创思维正版辅助器下... 5分钟了解“创思维正版辅助器下载”详细透视开挂辅助安装-哔哩哔哩;一、创思维正版辅助器下载有挂的是的...
两分钟科普!wpk真吗,哈糖大... 两分钟科普!wpk真吗,哈糖大菠萝可以开挂吗,曝光教程(发现有挂)-哔哩哔哩哈糖大菠萝可以开挂吗辅助...
第一分钟了解(昆仑大厅)外挂辅... 第一分钟了解(昆仑大厅)外挂辅助插件(透视)详细教程(2022已更新)(哔哩哔哩);亲真的是有正版授...
黑科技辅助!wpk俱乐部长期盈... 黑科技辅助!wpk俱乐部长期盈利打法(透视)软件透明挂黑科技(切实存在有挂)-哔哩哔哩;1、让任何用...
第6分钟了解“功夫川嘛辅助器”... 第6分钟了解“功夫川嘛辅助器”详细透视开挂辅助器-哔哩哔哩;人气非常高,ai更新快且高清可以动的一个...
第五分钟辅助!xpoker辅助... 第五分钟辅助!xpoker辅助,德州透视插件,攻略教程(有挂方法)-哔哩哔哩德州透视插件辅助器中分为...
两分钟了解(皮皮跑胡子)外挂透... 两分钟了解(皮皮跑胡子)外挂透明挂辅助工具(辅助挂)透明挂教程(2020已更新)(哔哩哔哩);皮皮跑...
黑科技辅助!微扑克可以加入俱乐... 您好,微扑克可以加入俱乐部这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩...
8分钟了解“掌中乐游戏中心辅助... 8分钟了解“掌中乐游戏中心辅助器”详细透视开挂辅助脚本-哔哩哔哩;1、这是跨平台的掌中乐游戏中心辅助...