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.

[参考译文] LAUNCHXL-F280049C:CAN 总线发送和接收

Guru**** 2524550 points
Other Parts Discussed in Thread: LAUNCHXL-F280049C, LAUNCHXL-F280025C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1105731/launchxl-f280049c-can-bus-transmit-and-receive

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件: LAUNCHXL-F280025C

请查看以下为该案例提供的更多信息:

我有开发板 Launchxl-F280049C。 我尝试将 CAN 总线用作接收器和发送器。 我使用了两个示例:CAN_ex1_loopback 和 CAN_Ex5_Transmit _Receive。

对于 CAN_ex1_loopback、我认为我无法感应 CAN-LO 和 CAN-Hi、因此我选择使用 CAN_Ex5_Transmit _Receive

我有一个示波器来感测 CAN-Hi 和 CAN-Lo 信号。 我还将 Arduino uno 与 MCP2515一起用于调试 CAN 总线和进行分析。 使用 Arduino Uno、我可以传输 CAN 消息、并且可以在示波器上看到信号。

使用 LaunchxL-F280049C 并使用 CAN_Ex5_Transmit _Receive 示例、我仍然无法感应 J14上的 CAN-LO 或 CAN-Hi 信号。调试时、我看到它卡在"while (MstxgSuccessful)"中;当使用#define transmit 时、它卡在"while (MsxrxgSuccessful)"行中、当它处于接收模式时

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

    艾哈迈德  

    Launchpad 的引脚配置不同、因为默认情况下、示例定义了控制卡的引脚配置。  

    要启用正确的引脚配置、请转至器件文件夹-> device.h 文件并进行正确的定义:

    #define _LAUNCHXL_F280049C

    这应确保您能够在右侧引脚的示波器上看到信号。

    谢谢。

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

    艾哈迈德  

    另一种更好的方法是在构建示例时、转到 Project -> Build Configurations -> Set Active -> CPU1_LAUNCHXL_RAM/FLASH

    这将在其自身上启用正确的引脚配置。

    谢谢。

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

    您好、Sahil、

    非常感谢。 是的、你是对的。 它们是不同的。 我两者都做了。 首先是#define _LAUNCHXL_F280049C、然后是 Project -> Build Configurations -> Set Active -> CPU1_LAUNCHXL_FLASH。 我仍然无法感测 CAN-Lo、CAN-Hi

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

    艾哈迈德  

    您是直接处理示例还是已修改代码? 如果是、您可以在此处提供代码吗?

    您还可以查看以下应用手册以了解常见的调试策略: www.ti.com/lit/SPRACE5

    谢谢。

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

    您好、Sahil、

    美好的一天! 我正在帮助艾哈迈德·萨萨赫在这里提出问题和答复。  

    为了分析问题是与硬件还是软件有关、我使用了另一个开发板(LaunchxL-F280025C)。 现在、我可以感应 CAN-LO 和 CAN-Hi 信号。 因此、我的开发板(LaunchxL-F280049C)似乎存在硬件问题。
    现在、我有另一个问题(LaunchxL-F280025C)、我认为这不是特定于此电路板的问题。 我有两个采用 MCP2515的 Arduino Uno 板。 我可以通过使用一个 Arduino Uno 板作为发送器、使用另一个板作为接收器、在两个板之间正确发送和接收 CAN 消息。 但是、当尝试从 LaunchcxL-F280025C (发送器)向 Arduino uno (接收器)发送 CAN 消息时、我会始终收到错误消息。 因此、问题似乎在于比特率和时钟频率。

    以下是我的 Arduino 代码(接收器)


    #include
    #include "MCP_CAN.h"

    const int spin = 10;
    const int ledPin = 2;
    布尔 ledON = 1;

    MCP_CAN (spiCSPin);

    void setup()

    Serial.begin(115200);
    引脚模式(ledPin、输出);
    while (CAN_OK!= CAN.begin(CAN_125KBPS,MCP_16MHz)

    serial.println ("CAN 总线初始化失败");
    延迟(100);

    serial.println ("CAN 总线初始化!");



    void loop()

    unsigned char len = 0;
    unsigned char buf[4];

    if (CAN_MSGAVAIL == CAN.checkReceive ())

    CAN.readMsgBuf (&len、buf);
    serial.println("len:");
    serial.println(len);

    unsigned long canId = CAN.getCanId();

    serial.println ("-------------------------------- ");
    serial.print ("来自 ID 的数据:0x");
    serial.println (canId、十六进制);

    for (int i = 0;i<len;i++)

    serial.print (buf[i]);
    serial.print ("\t");

    serial.println();

    --

    关于比特率、在 F280025和 Arduino uno 之间设置相同比特率时、我无法进行通信。 我使用以下函数在 F280025中定义比特率:
    CAN_setBitRate (CANA_base、DEVICE_SYSCLK_FREQ、50000、20);
    和设置消息:
    CAN_setupMessageObject (CANA_base、TX_MSG_OBJ_ID、0x155555、CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、 0、CAN_MSG_OBJ_TX_INT_ENABLE、MSG_DATA_LENGTH);
    我使用以下命令作为 txMsgData
    txMsgData[0]= 0x11;txMsgData[1]=0x22;txMsgData[2]=0x33;txMsgData[3]=0x44;
    在 Arduino 中、我将收到:
    来自 ID 的数据:0x6B5
    43 88 165 43 88 165 43 88 165 43 88 131 0 0 0 73 1 169 0 214 0 150 1 7 229 0 249 0 69 110 116 101 114 32 115 101 116 105 116 105 110 103 32 109 100 101 32 97 105 108 13 10 0 69 110 116 101 114 32 115 101 116 105 110 103 32 109 111 100 101 32 115 117 99 101 115 115 115 32 13 10 0 115 101 116 32 114
    因此 CAN ID 和消息数据是错误的

    此致、

    Jonathan

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

    Jonathan、  

    我们将对其进行研究、并将很快返回给您。

    谢谢。

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

    您好、Sahil、

    这是我们客户的另一个更新。

    使用具有 CAN 解码功能的示波器、我能够解码从 F280025正确传输的 CAN 信号。 无论是扩展帧还是标准帧、还是通过使用相同的比特率、我都能正确获取数据消息和帧 ID。 因此、我可以说这是 Arduino 问题。 如果您对此问题有任何建议或任何澄清、那将是不错的。 问题是、这是否是由于频率、比特率、Arduino 等因素造成的? 如果我连接另一个微控制器作为接收器、反之亦然、将来会发生这种情况吗?

    此致、

    Jonathan

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

    Jonathan、  

    我对迟迟不作出答复表示歉意,我在天气里有点不好。

    据我所知、您能够成功感应来自 F280025 Launchpad 的 CAN-LO 和 CAN-Hi 信号、并且消息 以所需的比特率和 msg ID 传输、如示波器所示。  

    [~ userid="470463" URL"支持/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1105731/launchxl-f280049c-ca-bus-transmit and receive/4103544#4103544"]CAN.begin(CAN_125KBPS,MCP_16MHz)

    Arduino 的比特率是否在此处设置? 根据示波器、它对应什么?  

    在这里、我可以了解的信息非常少、因此、如果您能分享一些相关的详细信息、那将会非常棒。

    谢谢。

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

    将此主题重新分配给另一位 CAN 专家、以获得答案。

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

    您提到您能够使用示波器从 F280025中查看正确的 ID 和数据、因此 F280025侧没有任何问题。 您在 Arduino 端看到的数据不是 F250025的数据。 如果节点之间的位速率不匹配、它们将快速进入总线关闭状态。 您永远不会在 CAN 中收到"错误数据"。 您将收到正确的数据、或者您将不会收到任何数据。 强烈建议您在 www.ti.com/it/SPRACE5中查看我的调试提示

    [引用 userid="470463" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1105731/launchxl-f280049c-ca-bus-transmit and receive/4103544#4103544"]while (CAN_OK!= CAN.begin(CAN_125KBPS,MCP_16MHz)))

    以上内容是否对应于125kbps? 如果是、它将如何与配置为500kbps 的 F280025配合使用?

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

    谢谢你 Sahil。

    您好、Haresh、

    非常感谢您提供的此类信息。 是的、CAN_125KBPS 对应于125kbps。 因为当将 Arduino 配置为使用500kbps 时、我不接收任何内容。 是的、这是 Arduino 问题、不再是 F280025问题。 我在示波器上接收到的数据只是噪声、而不是来自 F280025的数据。 有趣的是、当我配置两个分别作为发送器和接收器一起工作的输入放大器时、它们可以无误地进行通信。 在关闭此问题之前、我可以询问您的意见:问题是否在于 Arduino Uno 没有 CAN、它使用 SPI 至 MCP2515发送 CAN 消息?

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

    两个 Arduino 板相互通信这一事实告诉我、这些板上的 CAN 接口没有问题。 Launchpad 也不太可能出现问题。 问题可能是由于比特率不匹配。 请将 Launchpad 上的比特率设置为125kbps、因为我们知道比特率适用于 Arduino Uno。  

    CAN_setBitRate (CANA_base、DEVICE_SYSCLK_FREQ、125000、16);