执行NVIC_SystemReset程序不复位的解决办法
前言
最近做项目时要求加一个程序复位功能,刚开始想的很简单,加下面两行代码即可,但是测试发现执行完这两条语句以后程序卡死了,并没有按照预期复位重启
还有一个现象,使用jlink供电,板子上电4秒以后必现重启一次
__set_FAULTMASK(1); //关闭所有中断
HAL_NVIC_SystemReset(); //进行软件复位
分析过程
我的设备使用的jlink烧录仿真的,jlink接了VCC、GND、SWDIO、SWCLK、RESET这5根线。由于我使用jlink供的电,没有给设备外部额外供电,所以想着会不会是供电不足导致MCU没起来,但加上外部供电还是不行。于是怀疑是jlink有问题,把jlink拔掉,直接用外部供电发现正常了,4秒重启的问题也不出现了。
结论
拔掉jlink,程序能正常复位重启(注意:要从设备侧拔掉,不要从电脑侧拔,要保证jlink断电)
原因分析
推测应该是jlink的REST复位引脚的原因,导致程序无法复位,由于时间有限就没有去深究和测试验证了,如果大家找到了问题原因,麻烦评论告知一下。这里附上可能跟这个问题相关的博客链接:https://bbs.eeworld.com.cn/thread-1192817-1-1.html