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:CAN 通信问题 F28379D

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1287960/tms320f28379d-can-communication-problem-f28379d

器件型号:TMS320F28379D

您好!  

我正在处理与 F28379D 和 F28377S 的 CAN 通信。 我已经运行了一些 code composer 示例、如 can_simple_transmit 或 can_external_transmit。 我已将 F28379D 配置为具有 CAN_B、另一个配置为具有 CAN_A、借助示波器、我可以看到 CAN_B 的数据传输、但我无法在 CCS 中看到数据到达。 这就好像接收者没有听我说。
也许您可以帮助我了解这些信息、我已经阅读了一些论坛、我已经下载了一些代码、但我有相同的问题。

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

    Marco

               您是否浏览过 www.ti.com/lit/SPRACE5?中的调试提示?大多数问题都可以通过评估我提供的提示来解决。  

    请分享从发送端获取的示波器捕获。 即 CANTX 引脚。 波形应该 足够清楚、以便能够从中推断位持续时间。 有关采样波形、请参阅 SPRACE5。 这是我期望的清晰度。  

    查看 CANES 寄存器的值。 它可以为您提供有关可能发生什么情况的一些线索。  

    您能否私下与我分享您的电路板原理图? 您可以通过首先与我发起一个友谊请求来实现此目的。 您可以通过在将光标悬停在我的姓名上时选择"请求好友"选项来执行此操作。 另外、请分享您的总线的线路图。 图1-1. www.ti.com/lit/SPRACU9中的典型 CAN 总线 为您展示了正确的方法。

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

    接下来是代码。

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


    #define TXCOUNT 100000
    #define MSG_DATA_LENGTH 8
    #define TX_MSG_OBJ_ID 1


    Volatile unsigned long i;
    Volatile uint32_t txMsgCount = 0;
    uint16_t txMsgData[8];


    空 main (void)
    {

    device_init();

    device_initGPIO();
    GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB);
    GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB);

    CAN_initModule (CANB_BASE);

    CAN_setBitRate (CANB_BASE、DEVICE_SYSCLK_FREQ、500000、16);


    CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID、0x1、
    CAN_MSG_FRAME_STD、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_obj_no_flags、MSG_DATA_length);

    txMsgData[0]= 0x01;
    txMsgData[1]= 0x23;
    txMsgData[2]= 0x45;
    txMsgData[3]= 0x67;
    txMsgData[4]= 0x89;
    txMsgData[5]= 0xAB;
    txMsgData[6]= 0xCD;
    txMsgData[7]= 0xEF;


    can_startModule (cab_base);

    while (1)

    {
    can_sendMessage (CANB_BASE、TX_MSG_OBJ_ID、MSG_DATA_LENGTH、txMsgData);

    while (((HWREGH (CANB_BASE + CAN_O_ES)和 CAN_ES_TXOK))!= CAN_ES_TXOK)
    {

    asm (" ESTOP0");

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

    它看起来确实像一个有效的 CAN 帧。 但是、请提供放大的波形。 我需要确认位宽度为2us (因为您使用的是500kbps)。 另外、请测量接收器 CANRX 引脚上的信号。 如果在总线上没有仲裁(即在总线上只有两个节点、一个是发送器、另一个是接收器)、 除了接收器 CANRX 引脚上的 ACK 位外、发送器 CANTX 引脚的波形与接收器的 CANRX 引脚的波形完全相同。 请注意、ACK 由接收器而不是发送器生成。 我已经在 SPRACE5中对此进行了介绍。

    我接受了您的友好请求、因此请继续向我发送您电路的原理图和接线图。  

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

    Hareesh、  

    我连接 F28379D 和 Launchpad F28377S 之间的 CAN-H y CAN_L。 但信号是类似的、接收器不会生成 ACK。  

    黄线在发送器的 CANTX 引脚上测量、蓝线在接收器的 CANRX 引脚上测量。  

    位宽为2us。

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

    您是否将电路板的接地端(GND)连接在一起?

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

    是的、两个 GND 均已连接。  

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

    示波发送器 CANTX & CANRX 引脚上的信号。 它应该看起来与相同  图2-6. CANRXA 引脚上的波形 存储在 SPRACE5A 中。 如果您能够成功地监控来自接收器的 ACK 信号、那么消息传输成功。 恐怕我无法帮助你超越这一点。

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

    Hareesh、我有 CAN 通信、但现在我需要发送浮点数。

    更改 两个代码中的代码、但  

    uint16_t txMsgData_1[8]={0x21、0x32、0x23、0x14、0x45、0x26、0x27、0x18};

    至  
    float txMsgData_1[8]={3.3、4.2、4.5、5.4、3.6, 7.8、9.8、19.42 };

    和  

    浮点 rxMsgData[8];

    但数据在 接收过程中会有所不同。  


     

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

    Marco

      这不是 CAN 问题。 只支持字节传输。 它不知道(或关心)传输的是什么。 无论您在发送器侧写入哪个字节、接收器都会发送并忠实地接收这些字节。  总之、CAN 协议本身并不支持传输浮点数。 在发射器一侧将 F.P 数字转换为合适的字节(在接收器一侧进行反向操作)必须由您的软件处理。 与之无关的事情。