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.

[参考译文] TMS320F28379D:f28379d

Guru**** 2024750 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1037799/tms320f28379d-f28379d

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

您好!

我是一名新手、尝试使用 LAUNCHXL-F28379D 评估板学习 CAN 通信。

我使用 CANB 端口传输数据、当我使用单个 ID 训练数据时、该数据工作正常。当我添加新 ID 时、我无法传输数据。

我附上了以下代码、请告诉我哪里出错了。

/*
* main.c
*
*创建日期:2021年9月16日
*作者:Devilal
*

#include
#include
#include
#include
#include "F28x_Project.h"
#include "F2837xD_DEVICE.h"
#include "UART_Communications.h"

#include "F2837xD_examples.h"

#include "device.h"
#include "driverlib.h"


//
//定义
//
#define TXCOUNT 100000
#define MSG_DATA_LENGTH 8.
#define TX_MSG_OBJ_ID 1.
#define TX_MSG_OBJ_ID_2 1.
#define RX_MSG_OBJ_ID 2 //使用邮箱1
#define RX_MSG_OBJ_ID_2 //使用邮箱1
//
//全局
//
volatile unsigned long i;
volatile uint32_t txMsgCount = 0;
uint16_t txMsgData_1_8]={0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08};
uint16_t txMsgData_2[8]={0X09X10、0x11、0x12、0x13、0x14、0x15、0x16};
字符 msg[50];
char msg2[100];
char msg3[50];
uint16_t j;
uint16_t rxMsgData[8];
uint16_t rxMsgData_2[8];
uint16_t rxMsgData_3[8];
volatile uint32_t rxMsgCount = 0;
volatile uint32_t rxMsgCount_2 = 0;
volatile uint32_t rxMsgCount_3 = 0;
uint16_t k=0;


void main (void)

device_init();

//
//初始化 GPIO 并为 CANTX/CANRX 配置 GPIO 引脚
//在模块 A 上
//
DEVICE_initGPIO();
UART_Init();
GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB);
GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB);
CAN_initModule (CANB_BASE);
CAN_setBitRate (CANB_BASE、DEVICE_SYSCLK_FREQ、50000、16);

CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID、0x18FB47FF、
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_ID_2、0x9555AA、
CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
CAN_startModule (CANB_BASE);


//初始化中断控制器和矢量表。
//
interrupt_initModule();
interrupt_initVectorTable();
IER = 0x0000;
IFR = 0x0000;

//将 ISR 映射到唤醒中断。
//
interrupt_register (INT_SCIA_TX、sciaTxISR);
interrupt_register (INT_SCIA_RX、sciaRxISR);


//发送起始消息。
//

UARTA_Transmit 字符串(".......................................................................... \r\n",sizeof (".......................................................................... \r\n");
UARTA_Transmit _String ("\t\t\t CAN 通信\r\n"、sizeof ("\t\t\t CAN 通信\r\n"));
UARTA_Transmit 字符串(".......................................................................... \r\n",sizeof (".......................................................................... \r\n");
SCI_writeCharArray (SCIA_BASE、(uint16_t *)"Devilal\r\n"、sizeof ("Devilal\r\n");

INTERRUPT_ENABLE (INT_SCIA_RX);
INTERRUPT_ENABLE (INT_SCIA_TX);
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
EINT;
while (1)
//
//对无限传输的注释
//
//for (I = 0;I < TXCOUNT;I++)
//

CAN_sendMessage (CANB_BASE、TX_MSG_OBJ_ID、MSG_DATA_LENGTH、txMsgData_1);
CAN_sendMessage (CANB_BASE、TX_MSG_OBJ_ID_2、MSG_DATA_LENGTH、txMsgData_2);

while (((HWREGH (CANB_BASE + CAN_O_TXRQ_21))!= 0){}
//}
DEVICE_DELAY_US (50000);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    /*
    * main.c
    *
    *创建日期:2021年9月16日
    *作者:Devilal
    *

    #include
    #include
    #include
    #include
    #include "F28x_Project.h"
    #include "F2837xD_DEVICE.h"
    #include "UART_Communications.h"

    #include "F2837xD_examples.h"

    #include "device.h"
    #include "driverlib.h"


    //
    //定义
    //
    #define TXCOUNT 100000
    #define MSG_DATA_LENGTH 8.
    #define TX_MSG_OBJ_ID 1.
    #define TX_MSG_OBJ_ID_2 1.
    #define RX_MSG_OBJ_ID 2 //使用邮箱1
    #define RX_MSG_OBJ_ID_2 //使用邮箱1
    //
    //全局
    //
    volatile unsigned long i;
    volatile uint32_t txMsgCount = 0;
    uint16_t txMsgData_1_8]={0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08};
    uint16_t txMsgData_2[8]={0X09X10、0x11、0x12、0x13、0x14、0x15、0x16};
    字符 msg[50];
    char msg2[100];
    char msg3[50];
    uint16_t j;
    uint16_t rxMsgData[8];
    uint16_t rxMsgData_2[8];
    uint16_t rxMsgData_3[8];
    volatile uint32_t rxMsgCount = 0;
    volatile uint32_t rxMsgCount_2 = 0;
    volatile uint32_t rxMsgCount_3 = 0;
    uint16_t k=0;


    void main (void)

    device_init();

    //
    //初始化 GPIO 并为 CANTX/CANRX 配置 GPIO 引脚
    //在模块 A 上
    //
    DEVICE_initGPIO();
    UART_Init();
    GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB);
    GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB);
    CAN_initModule (CANB_BASE);
    CAN_setBitRate (CANB_BASE、DEVICE_SYSCLK_FREQ、50000、16);

    CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID、0x18FB47FF、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);


    CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID_2、0x9555AA、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
    CAN_startModule (CANB_BASE);


    //初始化中断控制器和矢量表。
    //
    interrupt_initModule();
    interrupt_initVectorTable();
    IER = 0x0000;
    IFR = 0x0000;

    //将 ISR 映射到唤醒中断。
    //
    interrupt_register (INT_SCIA_TX、sciaTxISR);
    interrupt_register (INT_SCIA_RX、sciaRxISR);


    //发送起始消息。
    //

    UARTA_Transmit 字符串(".......................................................................... \r\n",sizeof (".......................................................................... \r\n");
    UARTA_Transmit _String ("\t\t\t CAN 通信\r\n"、sizeof ("\t\t\t CAN 通信\r\n"));
    UARTA_Transmit 字符串(".......................................................................... \r\n",sizeof (".......................................................................... \r\n");
    SCI_writeCharArray (SCIA_BASE、(uint16_t *)"Devilal\r\n"、sizeof ("Devilal\r\n");

    INTERRUPT_ENABLE (INT_SCIA_RX);
    INTERRUPT_ENABLE (INT_SCIA_TX);
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
    EINT;
    while (1)
    //
    //对无限传输的注释
    //
    //for (I = 0;I < TXCOUNT;I++)
    //

    CAN_sendMessage (CANB_BASE、TX_MSG_OBJ_ID、MSG_DATA_LENGTH、txMsgData_1);
    CAN_sendMessage (CANB_BASE、TX_MSG_OBJ_ID_2、MSG_DATA_LENGTH、txMsgData_2);


    while (((HWREGH (CANB_BASE + CAN_O_TXRQ_21))!= 0){}
    //}
    DEVICE_DELAY_US (50000);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Devilal、

             在 e2e 论坛上、调试您的代码不是我们可以支持的。 因此、我们在 C2000ware 中提供了每个外设的示例。 具体而言、对于 DCAN、我们还有一份有用的应用报告 www.ti.com/lit/SPRACE5。 请查看调试提示。  

    它显示您正在对两个 Tx 对象使用相同的消息对象(1)。

    Fullscreen
    1
    2
    #define TX_MSG_OBJ_ID 1
    #define TX_MSG_OBJ_ID_2 1
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    尝试使用不同的消息对象、如下所示:

    Fullscreen
    1
    2
    #define TX_MSG_OBJ_ID_1 1
    #define TX_MSG_OBJ_ID_2 2
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    // 最后,我解决了这个问题  

    //谢谢,先生(Hareesh Janakiraman)

    /*
    * main.c
    *
    *创建日期:2021年9月16日
    *作者:Devilal
    *

    //
    #include "F28x_Project.h"
    #include "F2837xD_DEVICE.h"
    #include "F2837xD_examples.h"

    #include "UART_Communications.h"

    #include "device.h"
    #include "driverlib.h"


    #include
    #include
    #include
    #include


    //
    //定义
    //
    #define TXCOUNT 100000
    #define MSG_DATA_LENGTH 8.
    #define TX_MSG_OBJ_ID 1.
    #define TX_MSG_OBJ_ID_2 1.
    #define RX_MSG_OBJ_ID 2 //使用邮箱1
    #define RX_MSG_OBJ_ID_2 //使用邮箱1
    //
    //全局
    //
    volatile unsigned long i;
    volatile uint32_t txMsgCount = 0;
    uint16_t txMsgData_1_8]={0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08};
    uint16_t txMsgData_2[8]={0X09X10、0x11、0x12、0x13、0x14、0x15、0x16};
    uint16_t txMsgData_3[8]={0X17、0X18、0x19、0x20、0x21、0x22、0x23、0x24};
    字符 msg[50];
    char msg2[100];
    char msg3[50];
    uint16_t j;
    uint16_t rxMsgData[8];
    uint16_t rxMsgData_2[8];
    uint16_t rxMsgData_3[8];
    volatile uint32_t rxMsgCount = 0;
    volatile uint32_t rxMsgCount_2 = 0;
    volatile uint32_t rxMsgCount_3 = 0;
    uint16_t k=0;


    void main (void)

    device_init();

    //
    //初始化 GPIO 并为 CANTX/CANRX 配置 GPIO 引脚
    //在模块 A 上
    //
    DEVICE_initGPIO();
    UART_Init();

    GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB);
    GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB);
    CAN_initModule (CANB_BASE);
    CAN_setBitRate (CANB_BASE、DEVICE_SYSCLK_FREQ、50000、16);


    CAN_setupMessageObject (CANB_BASE、1、0x18FB47FF、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);


    CAN_setupMessageObject (CANB_BASE、2、0x12345、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);

    CAN_setupMessageObject (CANB_BASE、3、0x6789A、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
    CAN_startModule (CANB_BASE);


    //初始化中断控制器和矢量表。
    //
    interrupt_initModule();
    interrupt_initVectorTable();
    IER = 0x0000;
    IFR = 0x0000;

    //将 ISR 映射到唤醒中断。
    //
    interrupt_register (INT_SCIA_TX、sciaTxISR);
    interrupt_register (INT_SCIA_RX、sciaRxISR);


    //发送起始消息。
    //

    UARTA_Transmit 字符串(".......................................................................... \r\n",sizeof (".......................................................................... \r\n");
    UARTA_Transmit _String ("\t\t\t CAN 通信\r\n"、sizeof ("\t\t\t CAN 通信\r\n"));
    UARTA_Transmit 字符串(".......................................................................... \r\n",sizeof (".......................................................................... \r\n");
    SCI_writeCharArray (SCIA_BASE、(uint16_t *)"Devilal\r\n"、sizeof ("Devilal\r\n");

    INTERRUPT_ENABLE (INT_SCIA_RX);
    INTERRUPT_ENABLE (INT_SCIA_TX);
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
    EINT;
    while (1)
    //
    //对无限传输的注释
    //
    //for (I = 0;I < TXCOUNT;I++)
    //

    CAN_sendMessage (CANB_BASE、1、MSG_DATA_LENGTH、txMsgData_1);
    CAN_sendMessage (CANB_BASE、2、MSG_DATA_LENGTH、txMsgData_2);
    CAN_sendMessage (CANB_BASE、3、MSG_DATA_LENGTH、txMsgData_3);

    while ((((HWREGH (CANB_BASE + CAN_O_ES)& CAN_ES_TXOK))= CAN_ES_TXOK)


    // while (((HWREGH (CANB_BASE + CAN_O_TXRQ_21))!= 0){}
    //}
    DEVICE_DELAY_US (1000000);