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.

[参考译文] TMS320F28388D:CAN 通信示例

Guru**** 2455560 points
Other Parts Discussed in Thread: TMS320F28386D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1360745/tms320f28388d-can-communication-example

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

大家好!  

我必须    在 CAN 收发器提供的定制电路板中测试 TMS320F28386D 中的 CAN_A 和 CAN_B、执行该测试的合适 TI 示例是什么?

其理念是使用 CAN_A 进行传输、并在 CAN_B 或在同一个板中接受。

谢谢你。

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

    C:\ti\c2000\C2000Ware_5_02_00_00\driverlib\f2837xd\examples\cpu1\can\can_ex3_external_transmit

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

    校正:

    请参考以下路径的示例- C:\ti\cc2000\C2000Ware_5_02_00_00\driverlib\f2838x\examples\C28x\can\can_Ex5_Transmit_receive

    谢谢。

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

    您好!

    我看到了"can_ex5_transmit_receive"示例、 可以将其设置为发送或接收、以便与外部电路板对话、但 我必须在同一电路板中发送和接收、我如何编辑代码才能实现该操作?  

    我还必须为 CAN_B 启用第二个中断?

    谢谢。

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

    好的、您希望使用同一器件进行发送和接收、即使用 CAN-A 进行发送、使用 CAN-B 进行接收。 我们没有这样的示例、但您可以轻松地修改此示例。  您可以这样做:  

    复制此示例并将所有 CANA 实例替换为 CANB (请注意、此示例当前仅针对 CANA 写入、对于发送和接收配置均是如此)。 为 CANB 正确配置 GPIO 引脚极为重要。 更多信息、请参阅 www.ti.com/lit/SPRACE5。

    我必须同时为 can_B 启用第二个中断?

    CANA 和 CANB 都是完全独立的模块、具有自己的中断线。 每个模块有2个中断。 使用轮询还是中断完全取决于您、

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

    您是否已查看 SPRACE5中的调试提示?  

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

    我有一段时间没有收到您的来信。 我认为您的问题已经解决。

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

    您好!

    很抱歉耽误你的时间。

    我已经阅读了文档(SPRACE5)、我认为所有要点都受到了尊重(我正在使用带有正确 GPIO 的示例代码、并添加了从 canaISR 汲取灵感的 canbISR 器件)。 对于硬件、我在连接两端添加了120欧姆电阻器。

    这是 CANL 和 CANH 的范围:

     

    在此范围内、 我不 明白消息是否正确( ID 似乎不正确)。

    正如我所说、从调试来看、 rxMsgData 值始终为0、并且 rxMsgCount 不会递减、因此有些东西不起作用。

    模块 A 和 B 的设置如下:

    // CAN Module: A
    // Message Object ID Number: 1
    // Message Identifier: 0x15555555
    // Message Frame: Extended
    // Message Type: Transmit
    // Message ID Mask: 0x0
    // Message Object Flags: None
    // Message Data Length: 4 Bytes
    
    // CAN Module: B
    // Message Object ID Number: 1
    // Message Identifier: 0x15555555
    // Message Frame: Extended
    // Message Type: Receive
    // Message ID Mask: 0x0
    // Message Object Flags: Receive Interrupt
    // Message Data Length: 4 Bytes (Note that DLC field is a "don't care"
    // for a Receive mailbox
    
    
        //
        txMsgData[0] = 0x12;
        txMsgData[1] = 0x34;
        txMsgData[2] = 0x56;
        txMsgData[3] = 0x78;

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

    那么您的波形看起来确实是一个有效的 CAN 帧。 如果示波器能够在 CAN 帧上触发、那么事情就会变得很容易、因为您可以在示波器屏幕本身上看到对数据进行了解码。 正如 SPRACE5中建议的那样、我建议最初不要使用中断。 只需发送单个帧并探测接收模块的 CANRX 引脚。 确保数据到达 CANRX 引脚后、即可使用 IFx 寄存器读取数据。 如果您仔细评估每个提示并确保其合规性、SPRACE5中的调试提示会有所帮助。