我们的CAN测试代码如图所示:
通过CAN卡在电脑上接收数据,但是不是所有的数据都能够在CAN卡上接收到,是不是CANFD_transmitData这个函数的返回值不能用来判断CAN发送是否完成?
谢谢!
你好,
可用这种方式实现连续发送:
frameType = CANFD_MCANFrameType_FD;
while (1)
{
j++;
txMsgObjectParams.msgIdentifier =0xC5 + j;
retVal = Can_Transmit_Schedule(txMsgObjHandle,txMsgObjectParams.msgIdentifier,&txData[0], 64);
}
int32_t Can_Transmit_Schedule(CANFD_MsgObjHandle txMsgObjHandle, uint32_t msg_id, uint8_t *txmsg, uint32_t len)
{
uint32_t index = 0;
int32_t retVal = 0;
int32_t errCode = 0;
if(frameType == CANFD_MCANFrameType_FD)
{
while(len > 64U)
{
Task_sleep(1);
retVal = CANFD_transmitData (txMsgObjHandle, msg_id, CANFD_MCANFrameType_FD, 64U, &txmsg[index], &errCode);
index = index + 64U;
len = len - 64U;
}
Task_sleep(1);
retVal = CANFD_transmitData (txMsgObjHandle, msg_id, CANFD_MCANFrameType_FD, len, &txmsg[index], &errCode);
}
else
{
while(len > 8U)
{
retVal = CANFD_transmitData (txMsgObjHandle, msg_id, CANFD_MCANFrameType_CLASSIC, 8U, &txmsg[index], &errCode);
index = index + 8U;
len = len - 8U;
}
retVal = CANFD_transmitData (txMsgObjHandle, msg_id, CANFD_MCANFrameType_CLASSIC, len, &txmsg[index], &errCode);
}
if (retVal < 0)
{
System_printf("Debug: Error transmitting CAN data %x , Errcode %x\n", retVal, errCode);
}
return retVal;
}
参考链接: