您现在的位置是:首页 > 行业发展

AT90CAN128之CAN通信中断问题解决

智慧创新站 2025-04-06【行业发展】72人已围观

简介上个月公司的一款基于AT90CAN128的产品现场使用发现运行半个小时以上之后通信就中断。于是赶紧在公司复现故障,发现设备运行半小时之后可能出现的现象是:1.串口接收器死掉;2.CAN的发送失败。于是乎进行了大量的实验,直到这周才解决问题。图一程序代码最后发现问题就出在了if(CANGSTA(1RX...

上个月公司的一款基于AT90CAN128的产品现场使用发现运行半个小时以上之后通信就中断。于是赶紧在公司复现故障,发现设备运行半小时之后可能出现的现象是:

1.串口接收器死掉;

2.CAN的发送失败。

于是乎进行了大量的实验,直到这周才解决问题。

图一程序代码

最后发现问题就出在了if(CANGSTA(1RXBSY))这行代码上。只要把这行代码注释掉,那么设备运行就正常,不会再出现通信中断的问题。百思不得其解,我们来看看数据手册是如何描述的。

图二数据手册对RXBSY的描述

我的理解就是这个状态寄存器的RXBSY位在检测到数据帧的时候会被硬件置位,那么用它来检测是否收到数据无可厚非,但是实际上它会导致CAN的发送失败,还可能会导致串口的接收死掉,真是奇葩了。

图三修改后的程序

修改后的程序其实就只是删掉了if(CANGSTA(1RXBSY))这行判断语句,这还是偶尔不小心注释掉之后发现的,要不然坑还会折腾更久。或许是我对这个寄存的RXBSY位理解有问题?

有老铁用个AT90CAN128的CAN通信的一起探讨一下。

很赞哦!(160)