TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049: 280049 DCAN 怎么在发送数据的时候改变数据长度

Part Number:TMS320F280049Other Parts Discussed in Thread:C2000WARE

280049 DCAN 怎么在发送数据的时候改变数据长度?因为CAN一帧数据最长为8bytes,有时候从机返回给主机数据不一定是8个,可能是动态的,因此怎么在发送时候修改这个长度?

直接 使用函数 CAN_sendMessage(uint32_t base, uint32_t objID, uint16_t msgLen,const uint16_t *msgData); 参数 msgLen 不起作用,参数设为6,实际主机接收长度仍旧是8.

使用 CAN_sendMessage_updateDLC(uint32_t base, uint32_t objID, uint16_t msgLen,const uint16_t *msgData); 发送数据,主机会报错,数据异常。

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

,

Li Cong:

谢谢!

,

Cherry Zhou:

您好,

Li Cong 说:DCAN 怎么在发送数据的时候改变数据长度

要发送的数据长度可以通过 DLC 字段进行配置。

Li Cong 说:为CAN一帧数据最长为8bytes,有时候从机返回给主机数据不一定是8个,可能是动态的,因此怎么在发送时候修改这个长度?

是的,接收器不知道要接收的帧的数据长度。可以是0到8之间的任何值。而且更重要的是,无需知道该长度。该信息嵌入在要接收的消息的 DLC 字段中。DLC 仅适用于要发送的数据,而不适用于要接收的数据。换句话说,DLC 字段是接收消息对象的"无关"字段。由于 DLC 字段嵌入到发送的帧中,因此接收报文对象可以确定正在传输的字节数量(因此需要接收)。

参数"msgLen"用于传递 DLC 值。

Li Cong 说:直接 使用函数 CAN_sendMessage(uint32_t base, uint32_t objID, uint16_t msgLen,const uint16_t *msgData); 参数 msgLen 不起作用,参数设为6,实际主机接收长度仍旧是8.

您是说即使对于一个发送消息目标,将msgLen 设置为6,但还是传输8个字节?还是说,即使接收帧的 DLC 值为6,也从接收报文对象读取8个字节?

直接针对不同长度使用此函数是没用的,因为它不会更新发送报文对象,正如以上答复中提到的。

Li Cong 说:使用 CAN_sendMessage_updateDLC(uint32_t base, uint32_t objID, uint16_t msgLen,const uint16_t *msgData); 发送数据,主机会报错,数据异常。

这就是开发此 API 的原因。不过此 API 中存在一个错误,现已修复,修复版本会再下一次更新时发布。

有关此问题的解决方法,请参阅以下帖子:

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1117880/tms320f280049c-can_sendmessage_updatedlc-and-can_sendmessage-did-not-work-to-set-data-length?tisearch=e2e-sitesearch&keymatch=can_sendMessage_updateDLC

,

Li Cong:

谢谢。我下载的是官网最新的库 C2000Ware_4_01_00_00,这个确实有问题,按照您提供的方法:

修改msgCtrl &= CAN_IF1MCTL_DLC_M;为msgCtrl &= ~CAN_IF1MCTL_DLC_M;,问题已解决。

希望后来的人有所借鉴!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049: 280049 DCAN 怎么在发送数据的时候改变数据长度
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1