This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我想请教一下,我需要通过28388D的CAN给外界发送数据。要求发出的每一包数据都必须带有一个CAN ID,每个包的CAN ID必须不同。
想实现上面这个功能,该如何在您提供的例程中,修改和添加代码呢?(网上查了一下,大部分都是对不同ID报文的数据的接收文章)
特来请教
谢谢
以can_ex3_external_transmit.c为例,可以在CAN_setupMessageObject函数中更改每次发送的ID。
也可以看一下这个帖子中的说明:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/937628/tms320f28377d-using-one-mailbox-for-multiple-transmit-messages
在图中这个位置,可以设置一个变量,让他每发送一条8字节的数据后,循环加1
或者
按照您分享的链接中,利用定义,写成下面这种代码,用来发送带有不同CAN ID的数据
#define TX_MSG_OBJ_ID1 0x66
#define TX_MSG_OBJ_ID2 0x68
#define TX_MSG_OBJ_ID3 0x96
.........
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID1, 0x95555555,CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID2, 0x95555555,CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID3, 0x95555555,CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
我的理解是对的吗?
请教
然后,每次CAN发送数据的时候。
代码如下所示:
#define TX_MSG_OBJ_ID1 0x66
#define TX_MSG_OBJ_ID2 0x68
#define TX_MSG_OBJ_ID3 0x96
.........
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID1, 0x95555555,CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID2, 0x95555555,CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID3, 0x95555555,CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);
.............
for(i = 0; i < TXCOUNT; i++)
{
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID1, MSG_DATA_LENGTH,txMsgData);
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID2, MSG_DATA_LENGTH,txMsgData);
CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID3, MSG_DATA_LENGTH,txMsgData);
............
}
是这样吗?
特来请教
谢谢!
没仔细看例程,看了一下,从这里开始回答有误了。
一般所说的CAN ID是指的MSGID (Message Identifier),在DCAN中也被称为ARBITRATION ID。
如果要每次发送的ID都是不同的,那么需要在CAN_setupMessageObject中更改Message Identifier,也就是函数中的0x95555555这个值。
可以通过定义一个变量来替代0x95555555,然后在CAN_setupMessageObject中更新这个变量来更改消息ID。