根本原因是:主站发送帧太快时,帧接收到了从站的接收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;
}