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.

[参考译文] CCS/EK-TM4C1294XL:可与 tm4c1294xl 连接

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/575716/ccs-ek-tm4c1294xl-can-interfacing-with-tm4c1294xl

器件型号:EK-TM4C1294XL
主题中讨论的其他器件: SN65HVD265TM4C123DK-TM4C123G

工具/软件:Code Composer Studio

你好,先生  

我正在尝试将 SNHVD265 CAN 收发器连接到 tm4c1294xl、因为我不熟悉 Code Composer Studio、所以我已经开始使用现有的设计、即使在包含了所有库和所需的链接器文件之后、我仍然会收到错误消息。 我无法调试错误、因为每次生成时都会出现所有新错误。 帮我解决这个问题。

还有更多的其他误差、如

未解析的文件

未定义的标识符

链接错误  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否从 DK-TM4C123G 的 CAN 示例开始? PB4和 PB5不是 TM4C123或 TM4C129器件上的 CAN 引脚。 您在 EK-TM4C1294XL 和 SN65HVD265的 TXD 和 RXD 之间连接了哪些连接器引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、我没有尝试过 DK-TM4C123G。 好的、我已经将端口替换为 PA0和 PA1、因为我只使用一个 CAN 收发器。 我在同一程序中编写 TX 和 RX 逻辑的附加代码有什么问题? 此程序不可执行
    #include
    #include
    #include "hw_CAN.h"
    #include "hw_memmap.h"
    #include "hw_ints.h"
    #include "CAN.h"
    #include "gpio.h"
    #include "interrupt.h"
    #include "pin_map.h"
    #include "sysctl.h"

    //计数器来跟踪发生中断的次数
    volatile uint32_t g_ui32IntCount = 0;

    //使用三个消息对象
    volatile uint32_t g_ui32Msg1Count = 0;
    volatile uint32_t g_ui32Msg2Count = 0;
    volatile uint32_t g_ui32Msg3Count = 0;

    //flag 表示已发送3个消息对象
    volatile bool g_bMsgObj3Sent = 0;

    //flag 表示发生了一些传输错误
    volatile bool g_BErrFlag = 0;

    //接收器变量
    volatile bool g_BRXFlag1 = 0;
    volatile bool g_BRXFlag2 = 0;
    volatile bool g_BRXFlag3 = 0;


    //将保存不同消息的 CAN 消息对象
    tCANMsgObject g_sCANMsgObject1;
    tCANMsgObject g_sCANMsgObject2;
    tCANMsgObject g_sCANMsgObject3;


    uint8_t g_pui8Msg1[4]={0、0、0};
    uint8_t g_pui8Msg2[5]={2、2、2、2};
    uint8_t g_pui8Msg3[6]={3、3、3、3、3、3、 3};
    uint8_t g_pui8Msg4[8]={4、4、4、5、 5、5、5 };

    CAN 外设的//中断处理程序
    无效
    CANIntHandler (空)

    uint32_t ui32Status;
    //读取 CAN 中断状态以知道中断已发生
    ui32Status = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);

    //如果发生则获取中断的状态
    if (ui32Status = CAN_INT_INTID_STATUS)

    ui32Status = CANStatusGet (CAN0_BASE、CAN_STS_CONTROL);
    //设置错误标志以指示发生了错误
    G_bErrFlag = 1;

    //检查 Message1的原因
    否则、如果(ui32Status = 1)

    //获取消息对象并清除中断
    CANIntClear (CAN0_BASE、1);

    //递增计数器以指示消息发生
    G_ui32Msg1Count++;

    //清除标志以消除错误
    G_bErrFlag = 0;

    //检查消息2.
    否则 if (ui32Status = 2)

    CANIntClear (CAN0_BASE、2);
    G_ui32Msg2Count++;
    G_bErrFlag = 0;


    //检查消息3.
    否则 if (ui32Status = 3)

    CANIntClear (CAN0_BASE、3);
    G_ui32Msg3Count++;
    G_bErrFlag = 0;


    其他

    //这里可能会发生一些虚假的情况




    //配置 CAN 进入循环
    内部
    main (空)

    /IF
    uint32_t ui32SysClock;
    //endif

    //定义系统振荡器时钟
    uint8_t pui8MsgData[8];
    tCANMsgObject sCANMessage;

    SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);

    //将外设设置为 CAN0
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //屏蔽外设
    GPIOPinConfigure (GPIO_PA0_CAN0RX);
    GPIOPinConfigure (GPIO_PA1_CAN0TX);
    //启用 GPIO 引脚
    GPIOPinTypeCAN (GPIO_PORTB_BASE、GPIO_PIN_4 | GPIO_PIN_5);
    //初始化 CAN 控制器
    CANInit (CAN0_BASE);

    //定义系统时钟频率和位速率
    /IF
    CANBitRateSet (CAN0_BASE、ui32SysClock、50000);
    //else

    // CANBitRateSet (CAN0_BASE、SysCtlClockGet ()、50000);
    //endif

    //启用 CAN 外设上的中断
    CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);

    //启用 CAN 中断处理器
    IntEnable (INT_CAN0);

    //启用 CAN 操作
    CANEnable (CAN0_BASE);

    //初始化 CAN 消息
    G_sCANMsgObject1.ui32MsgID = 0x355;
    G_sCANMsgObject1.ui32MsgIDMask = 0;
    G_sCANMsgObject1.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    G_sCANMsgObject1.ui32MsgLen = sizeof (g_pui8Msg1);
    G_sCANMsgObject1.pui8MsgData = g_pui8Msg1;

    //消息对象2.
    G_sCANMsgObject2.ui32MsgID = 0x356;
    G_sCANMsgObject2.ui32MsgIDMask = 0;
    G_sCANMsgObject2.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    G_sCANMsgObject2.ui32MsgLen = sizeof (g_pui8Msg2);
    G_sCANMsgObject2.pui8MsgData = g_pui8Msg2;



    //阅读消息
    for (;;)


    //打印消息2.
    PrintCANMessageInfo (&g_sCANMsgObject1、1);
    CANMessageSet (CAN0_BASE、1、&g_sCANMsgObject1、MSG_OBJ_TYPE_TX);
    //打印消息3.
    PrintCANMessageInfo (&g_sCANMsgObject2、2);
    CANMessageSet (CAN0_BASE、2、&g_sCANMsgObject2、MSG_OBJ_TYPE_TX);

    //消息对象3.
    G_sCANMsgObject3.ui32MsgID = 0x357;
    G_sCANMsgObject3.ui32MsgIDMask = 0;
    G_sCANMsgObject3.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    G_sCANMsgObject3.ui32MsgLen = sizeof (g_pui8Msg3);
    G_sCANMsgObject3.pui8MsgData = g_pui8Msg3;

    //清除标志以指示消息已发送
    G_bMsgObj3Sent = 0;

    //打印消息3.
    PrintCANMessageInfo (&g_sCANMsgObject3、3);
    CANMessageSet (CAN0_BASE、3、&g_sCANMsgObject3、MSG_OBJ_TYPE_TX);






    //接收器逻辑

    sCANMessage.ui32MsgID = 0x355;
    sCANMessage.ui32MsgIDMask = 0xffffff;
    sCANMessage.ui32Flags =(MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER |
    MSG_OBJ_EXDED_ID);
    sCANMessage.ui32MsgLen = 8;
    CANMessageSet (CAN0_BASE、1、&sCANMessage、MSG_OBJ_TYPE_RX);

    sCANMessage.ui32MsgID = 0x356;
    CANMessageSet (CAN0_BASE、2、&sCANMessage、MSG_OBJ_TYPE_RX);

    sCANMessage.ui32MsgID = 0x357;
    CANMessageSet (CAN0_BASE、3、&sCANMessage、MSG_OBJ_TYPE_RX);


    for (;;)

    if (g_bRXFlag1)

    sCANMessage.pui8MsgData = pui8MsgData;
    CANMessageGet (CAN0_BASE、1、&sCANMessage、0);
    G_bRXFlag1 = 0;
    PrintCANMessageInfo (&sCANMessage、1);


    if (g_bRXFlag2)

    sCANMessage.pui8MsgData = pui8MsgData;
    CANMessageGet (CAN0_BASE、2、&sCANMessage、0);
    G_bRXFlag2 = 0;
    PrintCANMessageInfo (&sCANMessage、2);



    if (g_bRXFlag3)

    sCANMessage.pui8MsgData = pui8MsgData;
    CANMessageGet (CAN0_BASE、3、&sCANMessage、0);
    G_bRXFlag3 = 0;
    PrintCANMessageInfo (&sCANMessage、3);


    返回(0);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请详细介绍您的系统以及无法正常工作的内容。 是否到达接收循环、但 RX 标志从未设置? CAN 总线上是否有两个节点、如 DK-TM4C123G 示例中的节点? 每个 CAN 总线需要至少两个以相同波特率运行的节点。 除非另一个 CAN 节点成功确认、否则 CAN 传输将不会完成。 此外、CAN 节点不接收其正在传输的消息(除非处于环回测试模式)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    基本上、我的设计涉及 tm4c1294xl、CAN 收发器和尝试从其捕获数据的外部器件。 外部器件通过收发器的 CANH 和 CANL、TXX 和 RXD 连接到 TM4C1294XL。 只使用 CAN 收发器就足以满足我的设计以及程序中所做的哪些更改、以便在 CAN 上接收消息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您要连接到 Booster Pack 2连接器 A2-5上的 PA0_CAN0Rx 和 Booster Pack 2连接器 A2-6上的 PA1_CAN0Tx、您是否已将跳线 JP4和 JP5更改为垂直对齐、而不是水平选择 CAN 而不是 UART?

    我不遵循您发布的代码。 您好像初始化了两个 CAN 发送对象、然后进入一个无限循环来发送这两个帧、初始化第三个发送对象并传输它。 我看不到您的代码将如何执行初始化接收对象的 main 部分。

    也许这个线程中发布的示例代码会对您有所帮助。 您必须将其从使用 CAN1更改为使用 CAN0以匹配您的硬件。

    https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/363647