主题中讨论的其他器件:HALCOGEN、
我是 CAN 通信新手。 我使用的是 TCAN1043DQ1收发器和 TMS570LS1224 launchpad (使用 Halcogen 和 CCS 环境)。
我能否获得用于传输以下图像中所示信息的示例代码? 哪些位字段是必需的?
如何为汽车应用创建 CAN 数据库?


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.
我是 CAN 通信新手。 我使用的是 TCAN1043DQ1收发器和 TMS570LS1224 launchpad (使用 Halcogen 和 CCS 环境)。
我能否获得用于传输以下图像中所示信息的示例代码? 哪些位字段是必需的?
如何为汽车应用创建 CAN 数据库?


您好、Sakthi、
几天前我发布了一个示例 CCS 项目。
CAN 数据帧图片中的所有位字段都是必需的。
CAN 帧有四种类型:
数据帧
2.远程帧
3.错误帧
4.过载帧
数据帧是标准 CAN 消息、将数据从发送器广播到总线上的其他节点。 远程帧是发送器从特定节点请求数据的消息。 错误帧可由检测到总线错误的任何节点传输。 过载帧用于在数据帧或远程帧之间引入额外的延迟。
如您发布的图片所示。 CAN 数据帧由7个字段组成:帧起始(SOF)、仲裁、控制、数据、CRC、 ACK 和帧结束(EOF)。 CAN 报文位被称为"显性"(0)或"隐性"(1)。 SOF 域包含一个显性位。 所有等待发送的网络节点都与 SOF 同步并同时开始传输。 仲裁机制决定了尝试发送的节点中的哪一个实际上将控制总线。
CAN 控制器将在 CAN 发送器发送数据时自动生成 SOF、CRC、EOF、CRC 定界符。 您需要指定消息 ID (11位或29位)、数据长度(DLC)(经典 CAN 通信的最大值为8字节)和数据。 如果消息不是远程帧、则 RTR 应为0。 ACK 由消息接收器在收到消息时发出。 IDE 代表扩展帧 ID (29位)。
在我的示例中:
1、报文 ID = 123U、并编程到 IF1ARB 寄存器。 位30 =1表示此消息使用29位 ID (扩展)。 位29=1表示该消息用于发送。 位[28:0]是消息 ID。
CANREG1->IF1ARB =(uint32) 0x800000U |(uint32) 0x40000000U |(uint32) 0x20000000U |(uint32)(((uint32) 123U 和(uint32) 0x1FFFFFFFU)<<(uint32) 0U;
2. DLC 被编程到 IF1MCTL 寄存器。
CANREG1->IF1MCTL = 0x00001000U |(UINT32) 0x00000800U |(UINT32) 0x00000000U |(UINT32) 0x00000000U |(UINT32) 8U;
要传输消息、只需调用 HALCOGen 生成的 API:
canTransmit (canREG1、canMESSAGE_BOX1、TX_PTR)。