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模块接收数据帧的间隔最小究竟能设置为多小???
|