TI中文支持网
TI专业的中文技术问题搜集分享网站

can启用远程帧的接收位置

can我打开了RTR远程帧,中断接收函数canMessageNotification。

但是实际上我在中断中没有接收到远程帧,是不是另有地方来读取RTR?

我移植了CANopen,发送远程帧,开启RTR后,得到了回应,但是不知道在什么地方接受的远程帧,因为我写的底层can只有一个发送,一个中断。

gaoyang9992006:

CAN 远程帧是一个空数据场的帧, 关键是在它的ID场和远程帧标志位,当远程帧标志位为1时他就是远程帧,数据场必须为空,被请求节点通过ID场的辨识来响应,发送被请求的帧到总线上,具体举例,我随便举一个,BCM需要知道车门的状态,一个远程帧过去,车门把自己的状态发回来

另外最后一句你的意思是,你没有写如何接收的代码?

Hanson Yang:

回复 gaoyang9992006:

我的所有接收都是通过can中断来接收的,那么是不是包括远程帧呢?

master发送远程帧的时候,can中断没有响应,所以下面的RTR判断也无法进行。

unsigned char canReceive(Message *m)
{uint32 msgBoxArbitVal = 0;uint32 msgCTL = 0;msgCTL = canGetMCTL(canREG1,canMESSAGE_BOX1);msgBoxArbitVal = canGetID(canREG1,canMESSAGE_BOX1);canGetData(canREG1,canMESSAGE_BOX1,m->data);m->cob_id = (uint16)(msgBoxArbitVal>>18) & 0x7FF;m->len =(uint8)(msgCTL & 0xFU);m->rtr = (uint8)((msgCTL>>9)&0x01);return 1;
}

Jay:

回复 Hanson Yang:

你好。

你是否把接收远程帧的邮箱设置了自动答复?

如果没有设置自动答复的话,那么收到的远程帧会被当作没有数据场的数据帧来处理。

Hanson Yang:

回复 Jay:

A message object with Dir = ‘0’ is configured for the reception of data frames, with Dir = ‘1’ AND Umask =‘1’ AND RmtEn = ‘0’ it is configured for the reception of remote frames.

我按照以上描述进行配置,可以接收远程帧了,但是数据帧就收不到了。

是不是数据帧和远程帧必须要分开使用两个message box呢?

我想既收到数据帧也收到远程帧。

Hanson Yang:

回复 Jay:

按照你所说,自动答复是不是Enable RTR?HCG配置的

Jay:

回复 Hanson Yang:

你好。

如果 你要用同一个邮箱来收数据帧和远程帧的话,建议把邮箱配置成接收Dir=1,这样远程帧会被当作数据帧接收。

接收到后,你可以用软件来判断是远程帧还是数据帧。

dh.sun:

你好 我也正在移植CANOPEN,我想请教下远程帧应该怎么发?

我试了很多方法,手册上说的是把接收对象的TxRqst置高就会引起远程帧的发送。但实际上这么做以后发出的数据还是“数据帧”,而不是远程帧。

 Setting TxRqst fora receive object causes the transmission of a remote frame with the same identifier as the data frame forwhich this receive object is configured.

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » can启用远程帧的接收位置
分享到: 更多 (0)