缘故原由剖析:电源永劫光运行时偶尔涌现运行韶光变小,或者运行韶光增加的少了。根据这个征象疑惑是运行韶光变量在某个时候发生了清零,进一步疑惑MCU运行时发生了复位。那么可以做一版测试程序记录下复位次数以及获取复位状态寄存器的值,复位次数变量在MCU复位时从Flash获取其值然后再加1,再把值写回Flash。复位寄存器的值每次在复位时赋值给复位寄存器变量,运行时通过CAN通信通报出来复位次数变量和复位寄存器变量。
如下是复位寄存器解释:

复位次数计数到1次,永劫光测试一周,创造期间复位了3次。到此确认MCU在运行时偶尔发生看门狗复位。

进一步查找看门狗复位的缘故原由,查看软件创造只有进入非常时会进入while(1)去世循环,等待看门狗复位,那么把while(1)屏蔽掉,把看门狗关闭,在非常处理代码中加入写Flash操作,试着把进入非常前的堆栈内容写入Flash保存起来,便于下次查看问题出在哪,结果测试创造程序进入非常后停在了非常,而且Flash也操作不明晰,并且MCU所有外设停滞了事情且CAN通信也停了。此时变无法知道堆栈情形,不清楚是哪里触发的非常。查看CM3威信指南创造此时MCU该当是芯片锁去世了。
本来可以通过获取PC和LR的值定位到程序出问题前末了运行到哪里,但是由于芯片锁去世,无法查看,此时只能再去剖析代码和电源本身,又提出疑问,电源可能受到外部滋扰,导致进入中断时产生双重硬Fault,朝着这个方向创造电源有利用到两路外部上升沿中断来检测两个风扇转速,判断风扇故障状态。用示波器查看风扇转速旗子暗记,创造实际波形噪音比较大,是否是这里引起的呢?试一试吧,屏蔽这两个中断,还用查询办法检测风扇转速旗子暗记高低电平时间来判断风扇故障状态,测试电源两个月再也没有创造复位问题了,问题到这里办理了。
办理办法:由原来中断办法检测风扇转速判断风扇故障改为查询办法检测风扇转速旗子暗记高低电平时间判断风扇故障,问题完美办理。
履历总结:STM32F103在进入外部中断时,如果引脚上滋扰比较大,可能会使MCU进入硬Fault,如果此时再触发一次,芯片就锁去世了,只能等待看门狗复位,在这个电源上风扇旗子暗记是方波,不断有存在滋扰的上升沿进来,MCU自然就锁去世了。后续在利用中断时要特殊把稳多次触发硬Fault使芯片锁去世的情形。








