我将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;
}
|