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

news2024/11/26 11:29:40

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

前言

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

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掉电检测功能就介绍到这里,如果你们还有什么问题,欢迎评论区留言。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1311658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础语法之多态

什么是多态 通俗来说就是多种形态,具体点就i是去完成某个行为,当不同的对象去完成时会产生不同的状态 都是吃东西,狗是吃狗粮,猫是吃猫粮 向上转型 本质就是创建一个子类对象,将其当作父类对象来使用 语法格式&am…

[Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解

一. 创建k8s部署的镜像 1.部署nodejs项目 (1).上传nodejs项目到节点node1 (2).压缩nodejs项目 (3).构建nodejsDockerfile 1).创建nodejsDockerfile 具体可参考:[Docker]十.Docker Swarm讲解,在/root下创建nodejsDockerfile,具体代码如下: FROM node #把压缩文件COPY到镜像的…

pycharm多线程报错的问题(未解决)

暂未解决!若有佬知道如何解决,还请不吝赐教~~~先谢过啦 问题描述: 看了一下可能是这里的问题: 根据建议,在walks之前加了 freeze_support() 但是没有效果。 关键是,在jupyter上运行是没有问题的&#x…

逆向获取某音乐软件的加密(js逆向)

本文仅用于技术交流,不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块,若有侵权请联系作者更改。 老套路,打开开发者工具,直接开始找到需要的数据位置,然后观察参数,请求头,cookie是…

1- Electron 创建项目、初始化项目

Electron官网 Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron Electron 初始化 初始化项目 - 构造package.json npm init -y 安装Electron模块包 npm i electron -D // 注意!如果报错查看node包是否太高 配置启动脚本 {&quo…

安全护航:迅软DSE加密软件在设计院所图纸文件中的成功案例分享

近年来,随着信息化强国战略和可持续发展方针的推动,国内各大设计院所和建筑机构积极推进信息化建设,将电子文件作为主要的信息存储方式,并将其作为单位内外部信息交换的关键载体。在这一背景下,创新设计作为建筑设计单…

如何实现自己的训练集

在anaconda prompt中查看(conda info -e)、删除(conda remove -n aimbot_env)虚拟环境 其中aimbot_env是虚拟环境的名字 是否要删掉?选y 创建虚拟环境(conda create -n aimbot_env python3.7.4&#xff0…

微信小程序---自定义组件

目录 1.局部引用组件 2.全局引用组件 3.组件和页面的区别 4.自定义组件样式 5.properties属性 6.data和properties的区别 7.数据监听器 8.纯数据字段 9.自定义组件-组件的生命周期 lifetimes节点 10.组件所在的页面的生命周期 pageLifetimes节点 11.插槽 &#x…

Redis设计与实现之简单的动态

目录 一、内部数据结构 二、简单动态字符串 1、sds的用途 实现字符串对象 将sds代替C默认的char*类型 2、Redis中的字符串 sds的实现 3、优化追加操作 4、sds 模块的 API 三、Redis动态字符串的内存分配和释放是如何进行的? 四、Redis动态字符串的扩容策略…

css+js 选项卡动画效果

选项卡上下左右翻转动画效果 <template><div class"web-box"><div class"topTitle"><div class"topTitle1">标题标题</div></div><div class"info-wrap"><div style"width: 100%;h…

互联网加竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

掌握iText:轻松处理PDF文档-高级篇-添加页眉和页脚

推荐语 本文介绍了如何使用iText编程库为PDF文档添加自定义的页眉和页脚。通过指定位置、大小、字体和颜色等属性&#xff0c;你可以将文本、图像或其他元素添加到每一页的固定位置&#xff0c;实现专业、可读的自定义页眉和页脚效果。这对于需要批量处理大量PDF文档或需要更精…

基于轻量级GhostNet模型开发构建工业生产制造场景下滚珠丝杠传动表面缺陷图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

YOLOv5改进 | 2023卷积篇 | AKConv轻量级架构下的高效检测(既轻量又提点)

一、本文介绍 本文给大家带来的改进内容是AKConv是一种创新的变核卷积&#xff0c;它旨在解决标准卷积操作中的固有缺陷&#xff08;采样形状是固定的&#xff09;&#xff0c;AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状&#xff0c;能够使用任意数量…

***Cpolar配置外网访问和Dashy

Dashy是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工具 结合cpolar内网工具,我们实现无需部署到公网服务器…

Spring Boot 3 整合 WebSocket (STOMP协议) 和 Vue 3 实现实时通信

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

基于 Webpack5 Module Federation 的业务解耦实践

前言 本文中会提到很多目前数栈中使用的特定名词&#xff0c;统一做下解释描述 dt-common&#xff1a;每个子产品都会引入的公共包(类似 NPM 包) AppMenus&#xff1a;在子产品中快速进入到其他子产品的导航栏&#xff0c;统一维护在 dt-common 中&#xff0c;子产品从 dt-com…

【Https】工作流程

HTTPS 也是⼀个应用层协议。是在 HTTP 协议的基础上引入了⼀个加密层。 前言 由于Http是明文传输&#xff0c;因此如果有人想修改/截获数据都是非常容易&#xff0c;因此就出现了运营商劫持问题。 加密基础知识 明文密钥>密文 加密 密文密钥>明文 解密 对称加密和非对…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 文章目录 亚马逊云…

jenkins 运行接口自动化测试脚本,安装第三方依赖库的一些总结

之前在做接口自动化时&#xff0c;jenkins 执行 job 安装 requirements.txt 中的第三方依赖库时折腾了许久&#xff0c;网上查的解决方案均未生效&#xff0c;后来找出一条解决方法&#xff0c;做个记录&#xff0c;希望帮助到遇到同样问题的小伙伴。 我们都知道可以通过生成 …