硬件:mcu STM32F103C8T6
can收发器 NXPTJA050
软件:keil 5.29
PCB原理图如下
错误现象:stm32单步调试发现在can初始化后,配置完can滤波器后can错误寄存器ESR立马检测到错误,但是can的errorcode为0
找了一块正常的板子在线调试,正常的情况下在can初始化滤波器配置后can的ESR寄存器应该都是0的。因此定位到硬件错误,在换了光耦、换了TJA1050后问题依旧。于是开始怀疑是MCU的问题,将TJA050取下,can路悬空的情况下在线debug,can错误寄存器ESR还是不为0,这就说明是MCU的问题了,换掉MCU重新烧程序OK了!
总结:一直听说市场上有翻新MCU坑惨嵌入式软件工程师的情况,不知道这次是不是中奖了,就算是全新的MCU也不能保证100%的正常。这次为了排查错误还专门写了个只有can接口的程序,前前后后一共花了3天时间,如何在软件中检测MCU是否正常,以减少这种坑爹的情况再次发生, 以后需要留意着方面的信息