如果能复现就一定能找到问题。有以下几种情况,可以去排查一下:
1、电源不稳定,看看VDD有没有低于1.8V瞬间(不同MCU的复位电平不一样,看看规格书)。频率调到50us,用触发下降沿触发。
2、复位引脚干扰,用示波器看看有没有瞬间低电平。典型现象:静电放电(ESD)导致复位引脚瞬时低电平
3、立看门狗IWDG喂狗时间超过Timeout周期(如STM32默认40ms)
4、窗口看门狗(WWDG)过早或过晚喂狗,调试技巧:在复位处理函数中读取RCC_CSR寄存器判断复位源
5、HSE晶体起振失败(常见于低温环境)PLL失锁导致时钟丢失。对策:启用CSS(Clock Security System)
6、程序跑飞,野指针访问(如未初始化的函数指针),数组越界
7、异常处理失败,HardFault未捕获(常见于RTOS任务栈溢出),中断服务程序(ISR)执行时间过长。
8、电磁干扰EMI,高频辐射导致程序异常(如变频器附近),有超级强的辐射,干扰MCU程序。
9、温度影响、高温导致Flash读取错误(工业级芯片在125℃以上可能异常)。
10、机械故障,机械振动导致虚焊(尤其是QFN封装)。
以上个人经验仅做参考,有考虑不周还请包涵。
|