STM32的CAN模块接收数据帧的间隔最小究竟能设置为多小???

[复制链接]
8512|7
 楼主| WITPIDAN 发表于 2012-12-10 13:42 | 显示全部楼层 |阅读模式
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模块接收数据帧的间隔最小究竟能设置为多小???
jy02326166 发表于 2013-1-31 14:10 | 显示全部楼层
while((CAN_MessagePending(CAN1, CAN_FIFO0) < 1) && (i != 0xFFFF))
{
        i++;
}
请问这一句有什么用?
mumu3013 发表于 2015-1-21 17:41 | 显示全部楼层
你这个问题怎么解决的?有方法了吗?
fengdshy 发表于 2017-2-20 14:26 | 显示全部楼层
大哥,解决了没,什么问题? fengdshy@163.com 谢谢!!
qbasicljx 发表于 2017-2-21 11:01 | 显示全部楼层
你在中断里面 printf 就花费不少的中断接收时间,就这样就漏数据严重了
qbasicljx 发表于 2017-2-21 11:02 | 显示全部楼层
就收数据 拷贝放入消息队列 中断外面处理数据
泰山特曲123 发表于 2017-2-21 12:29 来自手机 | 显示全部楼层
你需要计算出处理数据的时间,例如10ms接收,那如果你的处理时间超过10ms就会丢帧
joe940119 发表于 2017-8-16 15:49 | 显示全部楼层
你这个情况要不考虑加个循环缓冲队列,来解决多次中断接收数据导致数据没有时间间隔输出
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部