各位朋友,CAN通信中,怎样确保对方已经收到数据包了?

2019-12-21 12:10发布

各位朋友,CAN通信中,怎样确保对方已经收到数据包了?

要用,一发,一回应的方式么?,,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
wye11083
1楼-- · 2019-12-21 15:25
 精彩回答 2  元偷偷看……
zzipeng
2楼-- · 2019-12-21 17:13
本帖最后由 zzipeng 于 2018-3-3 12:16 编辑

判断CAN发送邮箱标志,没有空闲邮箱就一直等待(可以再加上一个软件超时保护,防止一直死在这里),
有了就自动发了。。如下所示:
  1. void CAN_TX_SPeed(uint16_t id,int16_t data1)
  2. {
  3.         CanTxMsg tx_message;
  4.         tx_message.IDE = CAN_ID_STD;
  5.         tx_message.RTR = CAN_RTR_DATA;
  6.         tx_message.DLC = 2;
  7.         tx_message.StdId = id;   
  8.         tx_message.Data[0] = (u8)(data1>>8);         
  9.         tx_message.Data[1] = (u8)data1;

  10.         //CAN_Transmit(CAN1,&tx_message);
  11.         while(CAN_Transmit(CAN1,&tx_message)==CAN_TxStatus_NoMailBox);
  12. }
复制代码
ps,好像仍未解决如何知道对方收到没有~~啧啧啧
cpholr1
3楼-- · 2019-12-21 22:17
拿STM32来说,STM32上如果双方CAN收发器完全兼容的话,CAN数据包发送成功后,会有一个标志位,可以触发中断。

但是,并不能确定这个数据包是谁接收的。

所以要想知道目标设备是否收到这个数据包,只能让对方回复了。

二楼说的东西常用于485,CAN上常用的上层协议是CANopen

一般常规的应用,使用CANopen,有点浪费,能用到CANopen协议的1%内容就已经不错了。

SkyGz
4楼-- · 2019-12-22 02:04
zzipeng 发表于 2018-3-3 12:11
判断CAN发送邮箱标志,如下所示:

你这段代码, 是否理解为至少发送了2次....   while前那一行发送 是否可以不需要...
zzipeng
5楼-- · 2019-12-22 02:20
SkyGz 发表于 2018-3-3 12:14
你这段代码, 是否理解为至少发送了2次....   while前那一行发送 是否可以不需要... ...


对,我把他屏蔽掉~~以前的代码~~~献丑了
cpholr1
6楼-- · 2019-12-22 02:36
 精彩回答 2  元偷偷看……

一周热门 更多>