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.

TMS570LS3137: CAN发送数据时,如何更新DLC

Part Number: TMS570LS3137

在使用canTransmit函数时,每次发送的数据长度不固定,1~8,如何将长度信息更新的DLC并发送

  • 我已经设置  node->IF1CMD = 0x97U;,而且已经更新node->IF1MCTL &= 0xFFFFFF00;node->IF1MCTL |= dlc;从变量监视穿孔也看到DLC被改变,但是CAN接收到,长度依旧为8,

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    uint32 canTransmitWithDLC(canBASE_t *node, uint32 messageBox, const uint8 * data,const uint8 dlc)
    {
    uint32 i;
    uint32 success = 0U;
    uint32 regIndex = (messageBox - 1U) >> 5U;
    uint32 bitIndex = 1U << ((messageBox - 1U) & 0x1FU);
    /* USER CODE BEGIN (7) */
    /* USER CODE END */
    /** - Check for pending message:
    * - pending message, return 0
    * - no pending message, start new transmission
    */
    if ((node->TXRQx[regIndex] & bitIndex) != 0U)
    {
    success = 0U;
    }
    else
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     ,图中为监视状态,看起来是没有生效

  • 更正一下,调整代码位置,则发送正确

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*8*/
    node->IF1NO = (uint8) messageBox;
    node->IF1MCTL &= 0xFFFFFF00;
    node->IF1MCTL |= dlc;
    /*DLCdlc*/
    node->IF1MCTL &= 0xFFFFFF00;
    node->IF1MCTL |= dlc;
    node->IF1NO = (uint8) messageBox;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 好的,感谢分享,问题解决就好

x 出现错误。请重试或与管理员联系。