根本原因是:主站发送帧太快时,帧接收到了从站的接收FIFO里,但是没有被读出来。如果这时主站再发送一帧数据,主站的前一个帧的才会被从站读到,主站再发一帧数据到总线,另一个没被读出来的数据帧才会产生新的从站接收中断读数据。
FIFO是可以存放3条信息的,说明这里只有一条信息被读出了,另两条根本没读出来。
解决办法:
while(CAN_MessagePending(CAN1,CAN_FIFO0))
{
CAN_Receive(CAN1, CAN_FIFO0, &CAN_RxMessages[CAN_RxMessage_Write_Cursor]);
if(CAN_RxMessage_Write_Cursor++>=CAN_RX_MESSAGE_BUFF_SIZE)
CAN_RxMessage_Write_Cursor=0;
}
文章讨论了当主站发送帧速率过快导致从站FIFO接收缓冲区未完全读取数据的问题,解决方法是通过循环检查CANFIFO并读取数据,确保不丢失任何帧。
2835

被折叠的 条评论
为什么被折叠?



