[STM32F4] STM32的CAN发送成功,对端却只收到一部分报文,哪里有问题?

[复制链接]
1271|7
 楼主| liaofei1128@163 发表于 2020-6-19 18:52 | 显示全部楼层 |阅读模式
我将STM32F4的CAN1接口连接到USBCAN-II模块的CAN1接口中,然后在STM32F4中使用CAN1循环发1000个报文,结果USBCAN-II只收到16个。

测试截图

测试截图

如果在for循环中增加延迟delay_us(100)的时候,丢包会少一些,delay_us(200)时大部分时候可以全部接收,偶尔还会有丢包。
问题是加了delay后性能就上不去了,这个CAN1_Send_Msg函数本身就检查了发送状态标志是OK的,说明发送成功了,为什么还是需要delay呢?
  1. u8 CAN1_Send_Msg(u8* msg,u8 len)
  2. {       
  3.   u8 mbox;
  4.   u16 i=0;
  5.   CanTxMsg TxMessage;
  6.   TxMessage.StdId=0x12;
  7.   TxMessage.ExtId=0x12;
  8.   TxMessage.IDE=0;
  9.   TxMessage.RTR=0;
  10.   TxMessage.DLC=len;
  11.   for(i=0;i<len;i++)
  12.   TxMessage.Data[i]=msg[i];
  13.   mbox= CAN_Transmit(CAN1, &TxMessage);   
  14.   i=0;
  15.   while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;
  16.   if(i>=0XFFF)return 1;
  17.   return 0;               
  18. }



zchong 发表于 2020-6-19 20:33 | 显示全部楼层
本帖最后由 zchong 于 2020-6-19 20:35 编辑

正常啊,发送是需要时间的,太孟浪不好大致可根据波特率算出来一个时间
diweo 发表于 2020-6-20 13:56 | 显示全部楼层
可能是位时间设的不好
renzheshengui 发表于 2020-7-9 14:16 | 显示全部楼层
请问什么叫位时间
wakayi 发表于 2020-7-9 14:16 | 显示全部楼层
难道是超时接收?
wowu 发表于 2020-7-9 14:17 | 显示全部楼层
发送这么多数?
xiaoqizi 发表于 2020-7-9 14:17 | 显示全部楼层
每次都是这样吗
木木guainv 发表于 2020-7-9 14:17 | 显示全部楼层
楼主解决问题了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

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