新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2020-5-13
- 在线时间
- 21 小时
|

楼主 |
发表于 2022-7-4 15:29:30
|
显示全部楼层
找到问题了,是送函数等待发送完成的问题
原因:
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;这个地方,因为CAN_TransmitStatus的返回有4个状态,如果返回CAN_TxStatus_Pending,发送函数也会返回发送成功,猜测是应改为连续发送时,上一次的状态还是CAN_TxStatus_Pending,又往邮箱里填新的数据,新的数据没有填充成功,就导致只接受到了前面的0x00-0x17
发送代码如下
u8 CAN1_Send_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=0x12; // 标准标识符为0
TxMessage.ExtId=0x12; // 设置扩展标示符(29位)
TxMessage.IDE=0; // 使用扩展标识符
TxMessage.RTR=0; // 消息类型为数据帧,一帧8位
TxMessage.DLC=len; // 发送两帧信息
for(i=0;i<len;i++)
TxMessage.Data=msg; // 第一帧信息
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;
}
解决方法:
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待发送结束
改为
while((CAN_TransmitStatus(CAN1, mbox)!=CAN_TxStatus_Ok)&&(i<0XFFF))i++; //等待发送结束
|
|