【问题标题】:conceiving a bus can adapter using stm32使用 stm32 构想总线可以适配器
【发布时间】:2017-03-22 15:45:38
【问题描述】:

所以事情就是这样,我想构思一个使用 stm32 的通用 BUS CAN 适配器和使用 Qt 的桌面界面。 仍处于概念阶段,我想知道如何将来自 stm 的帧到 PC GUI,天气 1)视为 USB 帧;在这种情况下,如何将它们封装和解封装成 CAN 帧,是否有 Qt 库来促进这项工作,或者 2)在这种情况下作为 CAN 帧我发现 QCanBusDevice 和 QCanBusFrame 类似乎很有帮助,但在这个情况下,必须在对象创建期间指定 CAN 插件。所以我该怎么做?

【问题讨论】:

  • 您是否通过了 Media Agnostic USB 规范,看看是否有帮助?
  • 刚刚检查过,我认为使用 MA-USB 是不可能的。对不起。

标签: qt usb can-bus


【解决方案1】:

您做什么并不重要,因为您正在设计一个基于 USB 的自定义协议。在这里,您可以选择实现 USB 通信类设备,这样您就不需要自定义驱动程序或 libusb - 特别是考虑到 libusb 在 Unix 上的性能非常糟糕。

一旦用户空间可以使用数据,您就可以使用QSerialPort 访问它。您必须以某种方式构建 CAN 帧,因为串行端口是面向流的传输并且不知道任何数据包。最简单的是,您可以使用RFC 1662 HDLC octet-stuffed framing 封装帧。您可以使用其中一个字段以相同的方式将命令及其响应封装到您的设备中,例如ADDRESS 字段,用于复用 CAN 数据和命令/响应。

如果您现在希望将此设备公开给 Qt 串行总线框架,您必须write a custom CAN plugin 才能访问它。

为了说明这是多少代码:Qt 代码和微控制器代码的总和应远低于 1500 行以进行概念验证。一个最小的演示可能是

【讨论】:

  • 所以如果我做对了,该帧将作为 CAN 帧从 GUI 发送,封装/解封装的事情将由 STM 处理,因为串行端口是面向流的传输和不区分数据包。如果是这样,我还有一个问题,STM 将如何区分配置消息(例如配置 CAN 波特率)和数据消息?我想我需要添加一个标题不是吗?
  • 如果您查看我链接到的 HDLC 协议,您会发现有几个字段可以适合您自己使用。你可以例如使用 ADDRESS 字段值进行多路复用。例如。 0xFF 是 CAN 帧,0x00 是命令 #0,0x01 是命令 #1,等等。回复也是如此:当 STM 收到 CAN 名时,它会将其发送到地址 0xFF,当它回复命令 #0 时,它发送到地址 0x00,依此类推。 HDLC 最初用于 X.25(一个开放且有据可查的协议,顺便说一句)。它用于 PPP 的方式是 X.25 的一个非常狭窄的子集。您可以删除您不关心的字段。
猜你喜欢
  • 2019-08-23
  • 1970-01-01
  • 2015-08-30
  • 2019-11-12
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多