4. 复位电路分析:NRST引脚电平异常、外部看门狗复位、上电时序导致死机
复位电路,说白了就是给芯片一个“重新来过”的信号。很多人觉得它简单——一个电阻加一个电容,能出什么问题?
我告诉你,问题大了去了。在我经手的物联网项目里,至少有三分之一的不明原因死机,最后都追到了复位电路头上。NRST引脚电平不对、外部看门狗乱复位、上电时序冲突,这三个坑,几乎每个硬件工程师都会踩一遍。
4.1 NRST引脚电平异常:最常见的“假死”
STM32的NRST引脚是低电平有效。正常工作时,它应该被拉高到3.3V。如果这个引脚上出现了毛刺、纹波或者电压不够高,芯片就会频繁复位,表现就是“跑着跑着突然重启”。
我在项目中遇到过一台设备,在实验室跑得好好的,一到现场就每隔几分钟重启一次。查了两天,最后用示波器挂NRST引脚才发现——现场有大功率电机启动,在NRST线上耦合了一个200mV的负向毛刺。芯片以为有人按了复位键。
排查步骤:
- 测静态电压: 万用表量NRST对GND,正常应在3.0V~3.3V。低于2.8V就要警惕。
- 看波形: 示波器设为DC耦合,触发电平设2.0V,时基100ms/div。观察是否有低于2.0V的毛刺。
- 查电容: NRST对地的复位电容(通常100nF)是否虚焊或容值偏小?我见过电容焊反的案例,直接导致复位脚电压只有1.8V。
| 现象 | 可能原因 | 解决措施 |
|---|---|---|
| NRST电压2.5V~2.8V | 上拉电阻过大或漏电 | 外部并联4.7kΩ上拉电阻 |
| NRST有周期性毛刺 | 外部干扰耦合 | 加100nF+10μF滤波电容,走线远离高频信号 |
| NRST电压缓慢上升 | 复位电容太大或漏电 | 电容换100nF,不要超过1μF |
4.2 外部看门狗复位:被“饿死”还是被“打死”?
物联网项目里,外部看门狗(如SP706、MAX809)几乎是标配。但很多人装上看门狗之后,设备反而更容易死机了。为什么?
说白了,看门狗本身也会出问题。它有两种“死法”:
- 被饿死: 主芯片因为程序跑飞或死循环,没有及时喂狗。看门狗超时后拉低复位脚——这是正常保护。
- 被打死: 看门狗芯片自己的供电不稳,或者复位输出引脚被外部干扰拉低。这是误复位。
我曾经在一个NB-IoT项目里,设备每12分钟准时重启一次。查了三天,最后发现是看门狗芯片的MR(手动复位)引脚悬空了。这个引脚内部有上拉,但抗干扰能力很差。现场有射频发射,每次NB-IoT模块发数据时,MR引脚上感应到的射频能量就相当于一次手动复位。
看门狗复位排查清单:
- 用示波器同时抓看门狗WDI(喂狗脚)和RST输出。看是喂狗信号没了,还是RST先被拉低。
- 检查看门狗芯片的供电。很多看门狗要求供电在2.7V以上才能正常工作。如果VCC掉到2.5V,它就会乱复位。
- 确认看门狗超时时间。SP706默认1.6秒,如果你的喂狗周期是1.5秒,稍微卡一下就会超时。我习惯留50%以上的余量。
4.3 上电时序导致死机:看不见的“起跑线”
这个坑最隐蔽。STM32本身对电源时序要求不高,但当你外挂了传感器、LCD、4G模块、外部存储器时,事情就复杂了。
你想想看:如果MCU已经跑起来了,开始初始化外设,但外设的电源还没稳定——这时候MCU读到的寄存器值全是0xFF或0x00,初始化就失败了。更糟的是,有些外设会在上电过程中产生毛刺,把MCU的IO口拉出异常电平。
典型场景:
- MCU用3.3V,4G模块用3.8V。如果3.3V先起来,MCU开始跑程序,但3.8V还没到——4G模块的IO口可能通过MCU的GPIO倒灌电流,导致MCU死机。
- 外部Flash或FRAM的上电时间比MCU长。MCU复位释放后立刻去读Flash,读到的全是乱码。
我处理过一个案子:设备上电后,10次里有2~3次卡死在LCD初始化。查到最后,是LCD的复位引脚和MCU的NRST连在了一起。MCU复位释放时,LCD也同时释放,但LCD需要的启动时间比MCU长。MCU等不及就开始发初始化命令,LCD还没准备好,自然不响应。
解决方案:
- 硬件延时: 给慢速外设的复位脚加RC延时电路。比如LCD的复位脚对地接10μF电容,上拉到VCC接10kΩ电阻,这样LCD会比MCU晚几十毫秒释放复位。
- 软件等待: 在MCU初始化代码里,先延时100ms~500ms,再开始初始化外设。别小看这几百毫秒,它能解决80%的上电时序问题。
- 电源监控: 用电压监控芯片(如TPS3808)检测所有电源轨,等所有电压都稳定后,再释放MCU的复位。
4.4 实战:一个完整的复位故障排查案例
去年我做的一个智能网关项目,遇到了一个极其诡异的故障:设备在低温(-10℃)环境下,有30%的概率无法启动。常温下100%正常。
排查过程:
- 先用示波器抓NRST引脚的上电波形。发现常温下NRST从0V上升到3.3V用了约50ms,但在低温下用了200ms——复位电容的容值在低温下变小了?不对,电容是X7R材质,温漂没那么大。
- 再查看门狗芯片。发现低温下看门狗芯片的VCC只有2.9V(常温是3.3V)。问题出在电源芯片上——低温下电源芯片的启动电流不够,导致电压跌落。
- 看门狗芯片的欠压复位阈值是2.93V。2.9V刚好低于阈值,所以看门狗一直在输出复位信号,MCU永远无法启动。
嗯,复位电路这东西,看起来简单,但往往是整个系统稳定性的基石。NRST引脚的电平、看门狗的工作状态、上电时序的配合,任何一个环节出问题,设备就会表现出各种“神经质”的症状。下次你的设备莫名其妙死机时,别急着怀疑程序——先拿示波器看看复位脚,说不定答案就在那里。