打印
[STM32F4]

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

[复制链接]
935|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我将STM32F4的CAN1接口连接到USBCAN-II模块的CAN1接口中,然后在STM32F4中使用CAN1循环发1000个报文,结果USBCAN-II只收到16个。
如果在for循环中增加延迟delay_us(100)的时候,丢包会少一些,delay_us(200)时大部分时候可以全部接收,偶尔还会有丢包。
问题是加了delay后性能就上不去了,这个CAN1_Send_Msg函数本身就检查了发送状态标志是OK的,说明发送成功了,为什么还是需要delay呢?
u8 CAN1_Send_Msg(u8* msg,u8 len)
{       
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;
  TxMessage.ExtId=0x12;
  TxMessage.IDE=0;
  TxMessage.RTR=0;
  TxMessage.DLC=len;
  for(i=0;i<len;i++)
  TxMessage.Data[i]=msg[i];
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;
  if(i>=0XFFF)return 1;
  return 0;               
}



使用特权

评论回复
沙发
zchong| | 2020-6-19 20:33 | 只看该作者
本帖最后由 zchong 于 2020-6-19 20:35 编辑

正常啊,发送是需要时间的,太孟浪不好大致可根据波特率算出来一个时间

使用特权

评论回复
板凳
diweo| | 2020-6-20 13:56 | 只看该作者
可能是位时间设的不好

使用特权

评论回复
地板
renzheshengui| | 2020-7-9 14:16 | 只看该作者
请问什么叫位时间

使用特权

评论回复
5
wakayi| | 2020-7-9 14:16 | 只看该作者
难道是超时接收?

使用特权

评论回复
6
wowu| | 2020-7-9 14:17 | 只看该作者
发送这么多数?

使用特权

评论回复
7
xiaoqizi| | 2020-7-9 14:17 | 只看该作者
每次都是这样吗

使用特权

评论回复
8
木木guainv| | 2020-7-9 14:17 | 只看该作者
楼主解决问题了吗

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝