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.

TMDSCNCD28388D: C2000

Part Number: TMDSCNCD28388D

我想请教一下,我需要通过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。

  • 感谢您的回复,已明白。

    谢谢