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:接收 CANopen 远程帧

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1638735/tms320f28388d-receive-the-canopen-remote-frame

器件型号: TMS320F28388D

我需要在 CANopen 中接收具有 COB-ID 700+Node-ID 的帧以进行节点保护、并使用单字节 1 位切换和 7Bit 状态来回答。  

// Mailbox2 接收远程框架、用于节点保护

这样可以不中断

can_setupMessageObject (cana_base、RX_REMOTE_FRAME_ID、(0x700 + 0x6)、can_MSG_FRAME_STD、can_MSG_OBJ_TYPE_RX、0、can_MSG_OBJ_RX_INT_ENABLE、0);

如果我这样做、即使 ID 不是 0x700 +6、也会为每个帧提供中断  
  can_setupMessageObject (cana_base、RX_REMOTE_FRAME_ID、(0x700 + 0x6)、can_MSG_FRAME_STD、can_MSG_OBJ_TYPE_RXTX_REMOTE、0、can_MSG_OBJ_RX_INT_ENABLE、0);

问题是什么? 如何使用该帧的 API 函数配置 CAN-Bus?  

提前感谢您!

 

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

    现在我了解了问题、我有另一个具有相同标识符的邮箱用于发送:  
      // Mailbox1 传输启动、节点保护、检测信号、1 字节
      can_setupMessageObject (cana_base、TX_BOOT_UP_ID、(0x700 + 0x6)、can_MSG_FRAME_STD、can_MSG_OBJ_TYPE_TX、0、can_MSG_OBJ_TX_INT_ENABLE、1);

    如果我使用不同的 ID、一切都按预期工作。  

    我需要在开始时发送引导消息、而不是节点保护。 您一方的正确解决方案是什么?  

    在 如上所示向 RX_REMOTE_FRAME_ID 发送启动命令后、是否应该使用 TX_BOOT_UP_ID 重新配置 MessageBox?  

    或者、您是否有更好的解决方案来发送和接收具有相同标识符的消息?  
    或者、是否可以在没有接收到远程帧的情况下触发 CAN_MSG_OBJ_TYPE_RxTx_REMOTE?  

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

    您好:Markus、

    您可以尝试一下、看看它是否起作用吗?

    CAN_setupMessageObject (Cana_base、RX_REMOTE_FRAME_ID、(0x700 + 0x6)、CAN_MSG_FRAME_STD、CAN_MSG_OBB_TYPE_RXTX_REMOTE、(0x700 + 0x6)、(CAN_MSG_OBB_RX_INT_ENABLE|CAN_MSG_OBB_USE_ID_FILTER)、0);

    上面基本上启用消息过滤功能、只接受指定为 (0x700+6) 的节点 ID 并应用相同的 maskID、因此它将只响应该节点 ID。

    此致、

    Joseph

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

    您好 Joseph、

    非常感谢您的帮助。

    我已经尝试过 您的解决方案。 问题在于它也响应了 0x716、0x717、0x726、0x727、因此我将 ID 掩码 更改为-> 0x7FF、这样效果更好、只回答了 0x706。

    但我仍然有问题,我无法在软件启动时发送远程帧。 它的解决方案是什么?  

    此致、  

    Markus  

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

    您好:Markus、

    在软件启动时、您是指在 F28388x 上电、运行内部引导代码和 F28388x 的本地初始化后?  在软件启动中、CAN 模块是否已初始化并定义消息对象、RX/TX GPIO 通道分配完成以及位时序?  您可能已选中此项、但只是想要确认。  一旦在软件启动后发送远程帧、就会帮助查看 CAN_ES(错误状态)和 CAN_ERRC(错误计数器)寄存器内容的值。 这些寄存器可以精确定位发送远程帧时可能发生的情况。

    此致、

    Joseph