stm32f103 CAN通讯多帧发送问题?
发送数据共有29个字节,所以拆开5帧发送多帧发送数据格式:
byte0 byte1 byte2 .... byte7
单帧数据 数据长度 数据开始
第一帧 0x01 0-255
byte0 byte1 byte2 .... byte7
单帧数据
第二帧 0x02
byte0 byte1 byte2 .... byte7
单帧数据
第xx帧 xx 数据结束
void can_tx1(void)
{
CanTxMsg TxMessage;
TxMessage.StdId=0x0001; //标准标识符为0x00
//TxMessage.ExtId=0x1314; //扩展标识符0x0000
TxMessage.IDE=CAN_ID_STD; //使用标准标识符
TxMessage.RTR=CAN_RTR_DATA; //为数据帧
TxMessage.DLC=8; //消息的数据长度为8个字节
TxMessage.Data=0x01;
TxMessage.Data=0x1D;
TxMessage.Data=xxxx;
TxMessage.Data=xxxx;
TxMessage.Data=xxxx;
TxMessage.Data=xxxx;
TxMessage.Data=xxxx;
TxMessage.Data=xxxx;
CAN_Transmit(CAN1,&TxMessage); //发送数据
}
void can_send_data(void)
{
if(rec_ok_flag)
{
rec_ok_flag=0;
can_tx1();
can_tx2();
can_tx3();
can_tx4();
can_tx5();
}
}
数据拆开5帧发送,但是只发送了前面3帧,后面2帧没有发送,不知道为什么?是最多只发送3帧吗??
测试截图:
安 发表于 2019-9-8 20:36
楼主没有等待发送完毕就进行发送,建议增加对发送缓冲区的判断,这个在例程中都包含了。 ...
您好,请问可不可以分享下例程 发送太快了,没判断是否发送完成就接着发下一帧,前三帧能发出去因为stm32 can发送邮箱有三个,所以其实是先存到邮箱了才会顺利发出,后面两帧因为邮箱满了而第一帧都还没发完,所以没发出去就丢了。
可以试试中间加个延时看看
can_tx1();
delay_ms(10)
can_tx2();
delay_ms(10)
。。。
也可以在发完后判断是否完成或超时
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //等待发送结束
if(i>=0XFFF)return 1;
或者下次发送前判断上次是否发送完成,邮箱是否满了
哀歌与世无争 发表于 2019-9-6 09:48
发送太快了,没判断是否发送完成就接着发下一帧,前三帧能发出去因为stm32 can发送邮箱有三个,所以其实是 ...
谢谢你,我在测试下 请问楼主问题解决路吗 攻城狮222 发表于 2019-9-8 14:39
请问楼主问题解决路吗
你好,问题已经解决,发送时间太快了,在帧与帧之间在增加延时解决问题! 楼主没有等待发送完毕就进行发送,建议增加对发送缓冲区的判断,这个在例程中都包含了。
页:
[1]