STM32 缓上电导致死机的问题分析
1. 场景现象
在一些供电比较特殊的场合,如太阳能供电,电池供电等,可能会导致稳压芯片输出的 3.3V 上升缓慢。在这种供电情况下,会导致MCU死机,让人感觉的程序没有跑起来。
2. 问题分析
在此情况下,MCU 为什么跑不起来呢, 笔者以 STM32L072 芯片为例,具体的分析一下。
我们先了解 STM32电源控制中有三个复位方式:
上电复位(POR)
掉电复位(PDR)
欠压复位(BOR)
POR 和 PDR

MCU供电电压为VDD,开始时为 0V,MCU 处于复位状态,开始供电时,VDD 逐渐升高,当大于 POR 电压时,过了 Trsttempo 时间, MCU 处于非复位状态, MCU 开始运行。当 VDD 下降时, 低于 PDR 电压时, MCU 变成复位状态。
POR和PDR的电压是固定的可通过数据手册查看:

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.65V 以下, 虽然释放了复位状态,变成非复位状态,但是 MCU 电压不足,导致复位不成功,这样, 等电压上升到 1.65V 之后, 还是没法正常运行。也就出现所谓死机的情况。
- 解决方法
可以设置成 BOR 复位方式, 因为 BOR 的阈值大于 MCU 工作的电压值,这样就可以保证 MCU 能正常工作的电压下, 进行释放复位状态。
选一款好的 LDO 芯片

浙公网安备 33010602011771号