原子中的CAN发送函数如下:
void CAN1_Send_Msg(u8* msg,u8 id) {?? ? ?? ?u8 mbox; ?? ?u16 i=0; ?? ?CanTxMsg TxMessage; ?? ?TxMessage.StdId=id;?? ? ?? ?// 标准标识符为0 ?? ?TxMessage.ExtId=id;?? ? ?? ?// 设置扩展标示符(29位) ?? ?TxMessage.IDE=0;?? ??? ? // 使用扩展标识符 ?? ?TxMessage.RTR=0;?? ??? ? // 消息类型为数据帧,一帧8位 ?? ?TxMessage.DLC=8;?? ??? ??? ??? ??? ??? ? // 发送两帧信息 ?? ?for(i=0;i<8; i++) ?? ??? ?TxMessage.Data[i]=msg[i];?? ??? ??? ??? ? // 第一帧信息 ? ? ? ? ? ?? ?mbox= CAN_Transmit(CAN1, &TxMessage);?? ? ?? ?i=0; ?? ?while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;?? ?//等待发送结束?? ?
}
修改为:
void CAN1_Send_Msg(u8* msg,u8 id) {?? ? ?? ?u8 mbox; ?? ?u16 i=0; ?? ?CanTxMsg TxMessage; ?? ?TxMessage.StdId=id;?? ? ?? ?// 标准标识符为0 ?? ?TxMessage.ExtId=id;?? ? ?? ?// 设置扩展标示符(29位) ?? ?TxMessage.IDE=0;?? ??? ? // 使用扩展标识符 ?? ?TxMessage.RTR=0;?? ??? ? // 消息类型为数据帧,一帧8位 ?? ?TxMessage.DLC=8;?? ??? ??? ??? ??? ??? ? // 发送两帧信息 ?? ?for(i=0;i<8; i++) ?? ??? ?TxMessage.Data[i]=msg[i];?? ??? ??? ??? ? // 第一帧信息 ? ? ? ? ? ?? ?mbox= CAN_Transmit(CAN1, &TxMessage);?? ? ?? ?i=0; ?? ?while((i<0XFFF)) ?? ?{ ?? ??? ?if(CAN_TransmitStatus(CAN1, mbox) == CAN_TxStatus_Ok)break;? ?? ??? ?i++;?? ?//等待发送结束?? ? ?? ?} }
|