STM32/STM8技术william hill官网
直播中

陈军

9年用户 326经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

can总线怎么发送多于8个字节的数据?

can总线怎么发送多于8个字节的数据?谁有多机can通信的源代码?
已退回1积分

回帖(10)

陈军

2015-10-20 16:36:43
CAN一帧数据最多八个字节数据,所以当发送数据大于8个字节时,拆成多帧来发。当用CAN连续发数据时,需要先判断是否有空邮箱,或者加延时也行。加延时的已调通
2 举报

陈军

2015-10-23 09:21:21
引用: 狂person 发表于 2015-10-20 16:36
CAN一帧数据最多八个字节数据,所以当发送数据大于8个字节时,拆成多帧来发。当用CAN连续发数据时,需要先判断是否有空邮箱,或者加延时也行。加延时的已调通

加延时的话确实可以,但是有一个问题是发送的同时还有其他优先级更高的发的话,怎么办,这时会不会出现数据没有发出去,我的想法是用发之前判断是否有空的邮箱,有的话发送,没有就等待,直到有空的邮箱把数据发出去为止
1 举报

陈军

2015-10-23 12:41:46
引用: 狂person 发表于 2015-10-20 16:36
CAN一帧数据最多八个字节数据,所以当发送数据大于8个字节时,拆成多帧来发。当用CAN连续发数据时,需要先判断是否有空邮箱,或者加延时也行。加延时的已调通

               
//                        CAN1_Send_Msg(CAN6_DATA,8,0x0101);
//                        CAN1_Send_Msg(CAN5_DATA,8,0x0101);
//                        CAN1_Send_Msg(CAN4_DATA,8,0x0101);
//                        delay_ms(1);                            //因为发送只有3个邮箱,所以发送3帧数据后要加延时
//                        CAN1_Send_Msg(CAN3_DATA,8,0x0101);
//                        CAN1_Send_Msg(CAN2_DATA,8,0x0101);
//                        CAN1_Send_Msg(CAN1_DATA,8,0x0101);
最好是每发送3帧加一个延时
1 举报

mango@orange

2015-10-27 09:37:43
发送邮箱有三个,发送完之后加延时就行
举报

chubbyk

2015-10-30 11:50:38
一次多发几个帧不就完了
举报

陈军

2015-10-30 12:57:18
引用: chubbyk 发表于 2015-10-30 11:50
一次多发几个帧不就完了

连续发3帧以上  对方收不到3帧之后的数据,后来加延时实现了
举报

张国春

2017-2-19 08:03:11
目前我也遇到这样的问题,多贞在发送时遇到优先级高的需要发送了,优先级低的肯定需要退出。等待优先级高的发送完成后才能进入再次发送。这需要软件来协调了,目前还没有编译出来。
1 举报

yuanjie

2017-9-13 17:36:17
楼主解决这个问题了吗?我想做一个发送任意字节的函数??怎么做呢
举报

yuanjie

2017-9-13 17:36:20
楼主解决这个问题了吗?我想做一个发送任意字节的函数??怎么做呢
举报

sxzu

2019-11-14 13:35:27
四年过去了,楼主肯定解决了这个问题了吧?想知道驱动函数中CAN1_Send_Msg(CANx_DATA,8,0x0101);第三个参数0x0101是指令ID吗?如何定义的呢?应该是stdID、extID这两个的吧?
1 举报
  • vg: 四年过去啦,肯定解决了吧,想知道怎么实现的,通过SAE-J1939-21协议,谢谢

更多回帖

发帖
×
20
完善资料,
赚取积分