STM32L151C8T6电源控制模块的使用(PVD、BOR、POR/PDR的理解)

第一次在CSDN上写博客,有错误还请大佬指出。

本人在项目过程中应用stm32l151模块,在以前的项目中,对电源的要求并不高,一般都是直接上电直接断电,这样并没有对电源方面考虑很多,但是这次的项目对电源方面提出很多要求,由于本次项目采用的是电容供电,而且电路的供电部分的设计导致了芯片的上电和断电是一个很缓慢的过程,以正常的思维进行程序设计的时候,就是在上电后读取断电时保存在EEPROM中的数据的时候,发现读取到的数据并不正常,和正常的数据存在着偏差,所以思考再三觉得是由于上电缓慢,这样导致了虽然程序在一定的电压下开始工作,但是部分外设并没有进行正常的配置。所以发生了一些未知错误。

阅读stm32芯片手册,发现其中的电源管理模块可以解决相关问题。

基本概念:
首先是基本概念的阐述:(本基本概念部分摘自stm32l151c8芯片手册以及零死角玩转STM32—基于野火F429[挑战者]开发板)

1、上电复位与掉电复位(POR 与PDR)
当检测到VDD 的电压低于阈值VPOR 及VPDR 时,无需外部电路辅助,STM32 芯片 会自动保持在复位状态,防止因电压不足强行工作而带来严重的后果。见图1(此图片摘自stm32l151c8手册P54),在刚开始电压低于VPOR 时(约1.5V),STM32 保持在上电复位状态(POR,Power On Reset),当 VDD 电压持续上升至大于VPOR 时,芯片开始正常运行,而在芯片正常运行的时候,当检 测到VDD 电压下降至低于VPDR 阈值(约1.5V),会进入掉电复位状态(PDR,Power Down Reset)。

根据图2(摘自零死角玩转STM32—基于野火F429[挑战者]开发板以及网上的大量资料),这个有一个40mV的阈值,但是手册上好像没有这么大的数值,不过手册上还有这个表格图3,不太明确是什么意思。如果根据这个手册的说明,阈值在不使用BOR的情况下应该是100mV。

2. 欠压复位(BOR)
POR 与PDR 的复位电压阈值是固定的,如果用户想要自行设定复位阈值,可以使用STM32 的BOR 功能(Brownout Reset)。它可以编程控制电压检测工作在图4中的阈值级别(此图片摘自stm32l151c8手册P54),通过修改“选项字节”(某些特殊寄存器)中的BOR_LEV 位即可控制阈值级别。其复位控制示意图见图5。


根据POR 与PDR的说明,其上电电压为1.5V左右,但是在1.5V电压下,芯片很多外设并不能正常工作,这种情况下如果上电很快,则不用多考虑,但是如果上电缓慢,当VDD大于1.5V左右时,程序开始运行,此时VDD还是比较低,而程序的初始化已经开始,这个情况下上电之后可能程序并不能正常运行,那么此时BOR就很有必要了。只需要设置BOR的等级,就可以把上电电压提高,此时可以保证程序在开始运行时VDD是充足的。

3.可编程电压检测器PVD
上述POR、PDR 以及BOR 功能都是使用其电压阈值与外部供电电压VDD 比较,当低于工作阈值时,会直接进入复位状态,这可防止电压不足导致的误操作。除此之外,STM32 还提供了可编程电压检测器PVD,它也是实时检测VDD 的电压,当检测到电压低于VPVD 阈值时,会向内核产生一个PVD 中断(EXTI16 线中断)以使内核在复位前进行紧急处理。该电压阈值可通过电源控制寄存器PWR_CSR 设置。

具体使用
PVD中断
PVD中断触发的原因有三种配置,判断具体的触发原因根据程序的内部流程是判断PWR power control/status register (PWR_CSR)寄存器的Bit 2 PVDO: PVD output位,该位的描述在下图,根据此描述,当VDD比PVD阈值(上限值)高的时候,PVD output为0,当VDD比PVD阈值(下限值)低时,PVD output为1,这样就体现出了Rising和Falling以及Rising_Falling。也就是当VDD开始大于PVD阈值(上限值)时,PVD output从1变成0,这时就是Falling,这个时候一般也就是上电过程,反之PVD output从0变成1,此时就是Rising。如果需要区分这两个中断实现不同的中断服务函数,那么就需要在PVD中断服务函数中,通过PVDO位来判断发生的具体是什么复位。

当上电开始,为了能够保证触发PVD复位并且执行完成PVD的中断服务函数,中断服务函数执行具体所需时间需要根据具体操作来定,这样也就是需要保证PVD发生中断到程序运行停止的时间要大于中断服务函数所需时间,具体的时间也就是PVD的下限阈值降落到BOR下限阈值这个过程所需要花费的时间,这个下降曲线和电器特性有关,两个下限阈值则由我们来确定,也就是由我们来确定BOR level以及PVD level,这个手册里已经规定了相应的几组level,他们相对应的上下限阈值也在手册里有说明。



对应到库函数中已经定义好的函数


如果不使用BOR,那么根据手册说明,程序在电压值为1.5V左右就会启动运行。

但是参考手册说明,1.5V情况下并不是所有的外设都能正常工作,为了保证外设能够正常工作,所以需要使用BOR,相当于延迟上电时间,保证电压可靠的基础上开始进行程序运行。

在使用过程中还发现了一个问题,就是我设置的PVD复位是上升沿复位,也就是从设计角度而言,我只希望在程序掉电的时候才会进入PVD中断,但是在使用过程中发现了一个问题,综合判断之后发现在上电的时候也出现了一次PVD中断。然后根据手册的说明
手册上写明,在默认情况下PWR_CSR寄存器的值是0x0000 0008,也就是说默认情况下PVDO位为0,而由于程序上电缓慢,在这种情况下配置完成PVD后,系统检测到VDD电压低于PVD下限值,这时硬件会在PVDO位写入1,这样就产生了一个上升沿信号触发了PVD中断。

最后画一张图

STM32L151缓慢上断电-电源控制模块的使用(PVD、BOR、POR/PDR)相关推荐

  1. 计算机主板上电源怎么插,教大家电脑主板上的电源开关插头怎么接

    近日有关于电脑主板上的电源开关插头怎么接的问题受到了很多网友们的关注,大多数网友都想要知道电脑主板上的电源开关插头怎么接的具体情况,那么关于到电脑主板上的电源开关插头怎么接的相关信息,小编也是在网上进 ...

  2. DM8168评估板上供电电源的设计

    在DM8168评估板山上通过J1插座输入单一的12VDC,这是板上所有电源的源,由这12VDC产生如下电源: l  EVM_12V:12V,输入,来自外部电源插座 l  EVM_5V0:5.0V,输出 ...

  3. 单片机I/O开漏输出详解 “与逻辑” ,改变上拉电源的电压,提供TTL/CMOS电平输出,标准的开漏脚一般只有输出的能力添加其它的判断电路,才能具备双向输入、输出的能力

    单片机I/O开漏输出详解 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 我们先来说说集电极开路输出的结 ...

  4. TCL , 型号L24F09 怎么开机, 按显示器上的电源 ,不管用。

    TCL   , 型号L24F09 怎么开机 按显示器上的电源 ,不管用. 之前连接过机顶盒, 用机顶盒的遥控器,就开了. 尝试那遥控器来开机,结果开不了. 难道需要接机顶盒? 这个机子卡吗? 有时候打 ...

  5. 计算机主板上的电源,解决办法:如何在计算机主板上插入电源指示灯?

    台式计算机主机的引导电缆的连接方法: 1.根据上面的标签,将所有电缆排列在一起,首先阐明每条线的定义:电源开关:POWERSW,可能的名称:POWER,POWERSWITCH,ON / OFF,POW ...

  6. 主板电源开关接口图解_电脑主板上的电源开关插头怎么接啊

    展开全部 台式电脑主机的开机排线的连接方法: 1.把所有排线理在一起,根据上面的标注,先来32313133353236313431303231363533e4b893e5b19e31333337616 ...

  7. 汽车上的电源模块:BAT、ACC、IGN、ST

    名字解释 BAT:蓄电池 Battery ACC:附件 Accessory IGN:点火 Ignition On ST:启动 Start 汽车启动开关上的ACC LOCK(锁盘)转到ACC,仅用于听音 ...

  8. ATE测试板:V93000 LB 板上MS-DPS 电源上为什么会加两电容?

    在查看 V93000-LB 板原理图时,常常会看到在 MS-DPS 电源"P"与地"G"间会设计两个电容,一个容量小的电容和一个容量大的电容,这两个电容容量为多 ...

  9. 新的Turbo按钮-平衡Windows服务器上的电源管理和性能

    Do you remember the Turbo Button? I actually thought of it is the "be slow button" because ...

  10. Ubuntu 16.04.1 LTS上安装电源管理系统TLP

    主页: http://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html https://github.com/linr ...

最新文章

  1. linux系统自带的监控工具
  2. 重磅!UCSF的研究者利用脑机接口首次让患者输出完整句子,展现恢复语言沟通的潜力...
  3. redis在mac上的安装
  4. 第三个spring冲刺第5、6、7天(三天汇总)
  5. oracle数据泵导入提示00972,oracle数据库使用expdp指定FLASHBACK_TIME遇到ORA-39150错误 | 信春哥,系统稳,闭眼上线不回滚!...
  6. 将redis当做使用LRU算法的缓存来使用
  7. [JavaWeb-JavaScript]JavaScript变量
  8. 对安卓应用进行加固签名,为上架各大应用市场做准备
  9. 计算机信息管理相关课题论文,计算机信息管理课题论文[].doc
  10. java 类的高级特性_java程序-类的高级特性
  11. oracle 主键约束重名,主键及主键索引的关系及相互影响
  12. Pycharm回车之后不能换行或不能缩进的解决方法
  13. 如何判定选择的日期与当前日期的前后关系
  14. Word字体修改(罚抄,抄作业专用)
  15. 关于这个错误的不明原因的解决之道
  16. linux备份根目录与还原脚本,Shell脚本备份和还原MBR(主引导记录)
  17. csdn博客搬家:及其方便的博客迁移、搬家工具,支持主流博客平台----CsdnSyncHexo。
  18. 第十四章 C语言头文件的编写_C语言模块化编程中的头文件
  19. 用PC机实现与ATV12变频器Modbus通信控制电机
  20. RTKLIB的一些个人实用总结

热门文章

  1. CyanogenMod ROM 首次官方兼容小米
  2. vue简单购物车结算计算总价
  3. 老版本金蝶迷你版9.1升级到金蝶KIS 13.0,升级错误.
  4. 如何用Redis统计UV(独立访客)
  5. 太一星晨印朝晖:从应用交付到融合安全
  6. A - Faulty Odometer
  7. 【org.mybatis.spring.MyBatisSystemException】There is no getter for property named ‘array‘‘
  8. 拼图软件——texturepacker
  9. 荣事达Royalstar无叶暖风机——功能逻辑与能耗分析
  10. 【历史上的今天】10 月 23 日:ipod 问世;谷歌推出 CSE 搜索服务;人机交互领域先驱诞生