打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32单片机PVD(掉电检测)的介绍及其重要作用!

前言

有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检测器。通过PVD我们可以设定一个基准电压,当芯片的供电电压高于或低于该基准电压时便产生PVD中断,我们可以在PVD中断里做一些处理。

PVD介绍

本文以STM32F1x为例,来说明PVD的使用。

用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS[2:0]位进行比较来监控电源,这几位选择监控电压的阀值。

通过设置PVDE位来使能PVD。电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀值。

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

由PLS[2:0]的介绍可以发现PVD的电压阈值共有8个等级,实际使用时可根据自己的实际情况进行选择。

对于软件编程中具体如何实现可以自行编写相关代码,也可关注【玩转单片机与嵌入式】公众号,在后台获取相关代码。

PVD的作用

在实际做产品/项目的过程中,可能大家对PVD的作用会忽视掉,下面列举PVD的作用:

01

记录设备掉电时间

这个很好理解,可能业务上就有这个需求,或者可以利用这一点来完成低功耗设备的待机时长测试。

02

通知其他处理离线

假如设备中有由干电池供电的MCU1和由锂电池供电的MCU2,MCU1的部分功能可能需要MCU2来完成,MCU1需要知道MCU2是否离线(因为锂电池可拔插,可能随时被拔)。这种情况就可以在MCU2上利用PVD来通知MCU1。通知的方式有很多,例如串口直接通知另一方自己将要断电了。

PS:当然也可通过MCU2监听MCU1的电源来实现。

03

防止掉电过程中程序跑飞

小编在之前设计的一款产品有一定的概率会出现程序丢失的情况,最初怀疑竞争对手恶意破坏或竞争对手尝试读取程序导致程序自动擦除。

后来经过实际测试发现:由于设备电压降落较慢,下电时间较长(约20ms)。在下电过程中电压较低/电压不稳定时PC指针乱跑(即所谓的程序跑飞),正好PC指向了代码中擦除Flash的位置。(设备进行ISP程序升级需要将自身的Flash擦除写入新数据)。

后来最终的解决方案为:在代码中增加PVD功能,在PVD中断中进行软件复位,保证程序不跑飞。

---The end---

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
STM32L151  PVD、BOR、POR/PDR的理解
如何利用MCU的PWM产生负电压?
基于STM32芯片的电源监控器应用方案
什么是单片机MCU?
stm32 最小系统-Changing's Blog
STM32F0单片机快速入门二 开发环境的建立 20200128
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服