主题中讨论的其他部件:C2000WARE
您好,
我想将CAN邮箱设置为仅接收RTR帧,但设备似乎同时接收RTR和数据帧。
我将邮箱1配置为接收RTR帧(但没有自动响应),CAN ID = 0x707,对所有标识符位使用ID筛选器。
对于预期的响应数据帧,DLC设置为1:
CAN_setupMessageObject(
CANB_BASE,
1,
0x707,
CAN_MSG_FRAME_STD,
CAN_MSG_OBJ_TYPE_TX_REMOTE,
0x7FF,
CAN_MSG_OBJ_USE_ID_FILTER,
1
);
我检查收到的RTR帧,通过阅读RTR消息清除'New Data'位,然后发送响应消息:
uint8_t responseData[8]; // initialized with zeroes
if (CAN_getNewDataFlags(CANB_BASE) & 0x00000001))
{
uint8_t dummy[8];
CAN_readMessage(CANB_BASE, 1, dummy);
CAN_sendMessage(CANB_BASE, 1, 1, responseData);
responseData[0] ^= 0x80; // toggle upper bit for each response message being sent
}
只要接收到RTR帧,上述程序就能正常工作。
(已成功检测到传入帧,响应数据帧按预期发送)
接收数据帧(具有相同的CAN ID)时会出现问题。
看起来它不仅会侦听RTR帧,还会侦听数据帧。
如果是数据帧,上述过程会变成一种奇怪的行为:
*数据帧被识别并可接收
*执行'CAN_sendMessage'现在是否发送RTR帧而不是数据帧(为什么??)
我的问题:
是否可以将邮箱设置为仅收听RTR帧?
(我只接受RTR并丢弃/忽略此邮箱的数据帧)
使用的C2000Ware是3.04 .00.00 版。
谢谢!
Markus