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/F28M35H52C:CANbus 问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/903862/ccs-f28m35h52c-canbus-problem

器件型号:F28M35H52C

工具/软件:Code Composer Studio

大家好
我正在尝试与 CANbus 通信我的两个卡。 我自己设计了卡、包括 CAN 收发器、我使用 f28m35h52作为处理器、两个卡都是。 我无法将卡与所附的代码进行通信。 您认为我的代码有问题还是由硬件问题引起?e2e.ti.com/.../canbus.txt

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

    在论坛上、我们无法支持调试您的代码。 请下载我的应用报告 http://www.ti.com/lit/sprace5 。 它有许多经过测试的示例。 我还敦促您查看提供的调试提示。 请注意、app.note 示例是为 TMS320F28379器件编写的。 但是、只要您处理 SYSCLKOUT 速度的变化以及 CANBTR 寄存器保证的结果变化、它们就可以轻松地用于任何具有 DCAN 的器件。

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

    当 ı 更新代码 H 引脚为3.2V L 引脚1.5v 时,我的 H ve L 值默认为2.2V。 但是 ı 在表达式屏幕中看不到接收变量的变化。  

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

    您是否阅读了我的 app.report 中的调试检查清单?

    请将波形连接到接收器的 CANTX 和 CAN RX 引脚。 我需要清楚地显示在 CANRX 引脚上接收到的数据以及接收器发出的 ACK 信号。 请参阅我的 app.report 中的图4。 您的波形应该与此类似。

    您可能会发现以下帖子对您有所帮助: https://e2e.ti.com/blogs_/b/industrial_strength/archive/2015/06/04/what-do-can-bus-signals-look-like

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

    谢谢你,Harris,

    我会听从你的意见。

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

    CanMessageGet ()函数中的问题。

    代码未 进入"if (usMsgCtrl & CAN_IF2_MCTL_NEWDAT)" 条件。 它跳过了其他地方,ı 无法解决它。

    if (usMsgCtrl & CAN_IF2_MCTL_NEWDAT)
    {
    //获取需要读取的数据量。
    pMsgObject->ulMsgLen =(usMsgCtrl & CAN_IF2_MCTL_DLC_M);
    
    //不要读取远程帧的任何数据,中没有任何有效的数据
    //该缓冲区。
    if ((pMsgObject->ulFlags & MSG_OBJ_REMOTE_FRAME)=0)
    {
    //从 CAN 寄存器中读出数据。
    CANDataRegRead (pMsgObject->pucMsgData、
    (unsigned long *)(ulBase + CAN_O_IF2_DATA)、
    pMsgObject->ulMsgLen);
    }
    
    //现在清除新的数据标志。
    HWREG (ulBase + CAN_O_IF2_CMD + 2)= CAN_IF2_CMD_TXRQSTNDAT >> 16;
    
    //将报文对象传输到由指定的报文对象
    // ulObjID。
    HWREGH (ulBase + CAN_O_IF2_CMD)= ulObjID 和 CAN_IF2_CMD_MSGNUM_M;
    
    //等待忙位清零
    while (HWREG (ulBase + CAN_O_IF2_CMD)和 CAN_IF2_CMD_BUSY)
    {
    }
    
    //指示此消息中有新数据。
    pMsgObject->ulFlags |= MSG_OBJ_NEW_DATA;
    }
    其他
    {
    //除了 MSG_OBJ_NEW_DATA 未设置的数据量之外
    //如果没有可用,则需要设置为零。
    pMsgObject->ulMsgLen = 0;
    } 

     

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

    如前所述、我们无法在 e2e 上支持代码调试。 请探测 MCU 上的 CANRX 引脚,以确保接收到正确的帧并且它不是远程帧(执行“其它”条件的一个原因)