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.
您好!
我正在关注 YouTube 上的 CAN 通信视频。 有人能告诉我如何配置 CAN 消息 ID 吗?
视频链接:- https://www.youtube.com/watch?v=TrKQN-sor-s
谢谢、此致、
Prathamesh Yawalkar
您好!
通过 CAN 总线进行通信是通过 CAN 帧完成的。 CAN 帧由 CANID 或仲裁 ID、CAN 数据和 CRC 组成。 CAN ID 或仲裁 ID 用于标识报文并指示报文的优先级。 帧有两种格式:标准格式使用11位仲裁 ID、扩展格式使用29位仲裁 ID。
CAN 是对等网络。 当 CAN 节点准备好传输数据时、它会检查总线是否占线、然后简单地将 CAN 帧写入网络。 CAN 帧不包含发送节点或任何目标接收节点的地址。 相反、整个网络中唯一的仲裁 ID 会标记帧。 CAN 网络上的所有节点都接收 CAN 帧、并且根据该传输帧的仲裁 ID、网络上的每个 CAN 节点决定是否接受帧。
如果多个节点试图同时向 CAN 总线发送一条消息、那么具有最高优先级(最低仲裁 ID)的节点将自动获得总线访问权限。 低优先级节点必须等到总线可用后再尝试再次发送。
在 RM48上、 DCAN IF1ARB 或 DCAN IF2ARB 用于存储消息的仲裁 ID。
例如:
CANREG1->IF1MSK = 0xC0000000U |(UINT32)((UINT32)((UINT32) 0x000007FFU &(UINT32) 0x1FFFFFFFU)<<(UINT32) 0U);
CANREG1->IF1ARB =(uint32) 0x800000U |(uint32) 0x40000000U |(uint32) 0x20000000U |(uint32)(((uint32) 1U &(uint32) 0x1FFFFFFFU)<<(uint32) 0U);
CANREG1->IF1MCTL = 0x00001000U |(UINT32) 0x00000000U |(UINT32) 0x00000000U |(UINT32) 0x00000000U |(UINT32) 8U;
CANREG1->IF1CMD =(uint8) 0xF8U;
canREG1->IF1NO = 1U;
请使用 HALCoGen 进行外设配置。 HALCOGen 包括轮询模式和中断模式下的2个 CAN 示例。