Target:stm8s208RB,
Ide:IAR Embedded Workbench
for STMicroelectronics STM8 v1.20Debugger:st-linkLib:官方STM8S Firmware Library
调试can模块,打开can错误警告中断,
CAN_ITConfig(CAN_IT_FMP | CAN_IT_EWG | CAN_IT_ERR, ENABLE);
俩块板一发一收没有问题,拔掉can通讯线,调试其中一块板,发送时会进入错误中断,这时候参考寄存器CAN_ESR,显示EPVF和EWGF被置位,奇怪的是LEC[2:0]的值经常显示是001(填充错)?查看CAN-TECR=0,,CAN_RECR=0xff,
怎么会是接收错误计数超限而没发送发送错误?这时候,把发送代码屏蔽掉,等于can上面什么没有动作,重新调试,不会进入错误中断,随机stop观察寄存器,也没有任何错误发生。
换一种错误中断,BOFF,即发送错误达超过255溢出后,can进入离线状态。
CAN_ITConfig(CAN_IT_FMP | CAN_IT_BOF | CAN_IT_ERR, ENABLE);
俩块板相通,甲一直发送,乙处于接收状态,都没有任何问题,拔掉can联线,甲不久就会停止发送帧(用示波器看的),stop进入查看,CAN_ESR,显示EPVF和EWGF被置位,BOFF还是0, CAN-TECR=0,,CAN_RECR=0xff。
所以,最奇怪的是再发送的时候为什么不是发送错误值增加而是接收错误计数增加,如果是板有收到错误信号,那按道理,不发送也会产生接收错误,事实是如果不发送,没有任何错误错误发生。 |