打印

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

[复制链接]
7763|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 谢谢!!

使用特权

评论回复
5
qbasicljx| | 2017-2-21 11:01 | 只看该作者
你在中断里面 printf 就花费不少的中断接收时间,就这样就漏数据严重了

使用特权

评论回复
6
qbasicljx| | 2017-2-21 11:02 | 只看该作者
就收数据 拷贝放入消息队列 中断外面处理数据

使用特权

评论回复
7
泰山特曲123| | 2017-2-21 12:29 | 只看该作者
你需要计算出处理数据的时间,例如10ms接收,那如果你的处理时间超过10ms就会丢帧

使用特权

评论回复
8
joe940119| | 2017-8-16 15:49 | 只看该作者
你这个情况要不考虑加个循环缓冲队列,来解决多次中断接收数据导致数据没有时间间隔输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝