| uint32_t Receive_CAN_number;//接收到的数据帧数 
 void CAN1_RX0_IRQHandler(void)     //100ms  50ms不会丢数  20ms左右就开始丢数据了
 {
 {
 CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
 Receive_CAN_number++;
 printf("\n\rCAN1接收数据帧数%d",Receive_CAN_number);
 
 }
 
 
 
 void CAN1_RX0_IRQHandler(void)  //100ms  50ms  不会丢数  20ms左右就开始丢数据了
 {
 while(CAN_MessagePending(CAN1,CAN_FIFO0)>=1) //接收前加了判断,还是依然掉数据
 {
 CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
 Receive_CAN_number++;
 printf("\n\rCAN1接收数据帧数%d",Receive_CAN_number);
 }
 }
 
 CAN通信波特率设置为1M.
 
 小弟 做汽车电子的,现在需用到ST的CAN模块,电脑端用周立功的CAN接口卡发送数据,与ST开发板通信成功,但是在CAN数据帧间隔周期很短的情况下,会出现数据帧丢失,为了屏蔽我的其他程序错误,我在CAN接收中断里只做了数据帧接收,打印数据帧的数量,通过发送1000帧数据,测试每隔100ms,50ms 发送数据,不会丢失,串口能打印出帧数位1000帧,但是如果为10ms,则只能接收431帧数据,如果为20ms,则能结束849帧数据.
 
 STM32的CAN模块接收数据帧的间隔最小究竟能设置为多小???
 
 |