数据发送过后

读取发送缓冲区0的控制寄存器 得出检测到发送错误位

也就是说下图中的bit4被置1,

大报文无法通过gre隧道_单片机

2.2 错误的种类
在CAN总线通信中,一共有五种错误:
位错误
ACK错误
填充错误
CRC错误
格式错误

CAN节点发送数据不成功,首先分析是不是CAN控制器本身的问题,查看CPU中的CAN core的状态寄存器,分析是否有BUS OFF, 如果存在BUS OFF, 则进一步查看具体的错误信息,是主动的错误还是被动的错,发送错误计数有没有超限,最后一次发生的错误状态是什么,查看是位填充错误还是格式错误等其他错误,然后具体问题具体分析。这种错误一般是有硬件发送线路出现问题引起,例如光隔次边不导通,发送接口接触不良等,再则是一些奇葩的错误,例如本例,收发线直接接反了,坑爹啊!



四、知识扩充
1、发生“位填充错误”,可能是CAN波形的上升沿/下降沿出现的位置不准确。
如果你用的是内部晶振HSI,很容易出现这种错误,改用外部晶振HSE即可。
内部晶振频率误差在2%以内,外部晶振频率误差要小得多。
一个8字节数据的扩展帧,由128个左右的位(包括ID、校验等)组成,靠后的位的上升沿/下降沿会因为频率误差累积导致其出现的位置不准确,可以用带存储功能的数字示波器分析出来。

2、如果是点对点通信,两个收发器的波特率和位时间配置如果不一样的话,很容易出现这样的问题。
楼主应该已经检查过通信两端的CAN控制器配置,不过还要检查一下两个MCU的主频是否相同、CAN总线的分频是否相同,CAN总线的H/L线有没有接反,已经终端电阻是否已经匹配。