STM32 缓上电导致死机的问题分析

1. 场景现象

在一些供电比较特殊的场合,如太阳能供电,电池供电等,可能会导致稳压芯片输出的3.3V 上升缓慢。 在这种供电情况下,会导致MCU死机, 让人感觉的程序没有跑起来。

2. 问题分析

在此情况下,MCU 为什么跑不起来呢, 笔者以STM32L072 芯片为例, 具体的分析一下。
我们先了解 STM32电源控制中有三个复位方式:

  1. 上电复位 (POR)
  2. 掉电复位(PDR)
  3. 欠压复位(BOR)

POR 和 PDR

上电复位/掉电复位波形
MCU供电电压为VDD,开始时为0V, MCU 处于复位状态, 开始供电时,VDD 逐渐升高,当大于POR 电压时,过了Trsttempo 时间, MCU 处于非复位状态, MCU 开始运行。当VDD 下降时, 低于PDR 电压时, MCU 变成复位状态。
POR和PDR的电压是固定的可通过数据手册查看
在这里插入图片描述

BOR

BOR阈值
MCU供电电压为VDD,开始时为0V, MCU 处于复位状态, 开始供电时,VDD 逐渐升高,当大于BOR 高阈值电压时,MCU 处于非复位状态, MCU 开始运行。当VDD 下降时, 低于BOR 高阈值时, MCU 变成复位状态。上图的 预留100mv是为了防止电压抖动时出现频繁复位。
BOR 的电压值是可编程的, 分为好几个等级,如下:
在这里插入图片描述

分析

上电和掉电复位 与 欠压复位功能是互斥的,只能使用一种, 要么 上电和掉电复位 ,要么 欠压复位, 在没有操作的情况下,MCU 默认使用的 上电和掉电复位。
但是上电复位的电压(POR= 1.5V) 低于MCU 能工作的最低电压(VDD =1.65V),为了能让MCU 达到最低工作电压之后再释放 复位状态, 为此延时了 Trsttempo 时间,该时间值约为0.7ms。
在这里插入图片描述
也就是在0.7ms内,VDD 电压会升到1.65v以上, 这样过了0.7ms 后释放复位, MCU 就可以正常的运行,这是正常的情况,但是在缓慢上电的情况下, 在0.7ms 之后 VDD 电压可能还是1.65以下, 虽然释放了复位状态,变成非复位状态,但是MCU 电压不足,导致复位不成功,这样, 等电压上升到1.65V 之后, 还是没法正常运行。也就出现所谓死机的情况。

3. 解决方法

  • 我们可以设置成BOR 复位方式, 因为BOR 的阈值大于 MCU 工作的电压值,这样就可以保证MCU 能正常工作的电压下, 进行释放复位状态。
  • 选一款好的LDO 芯片
  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值