4

我有一个通过 USB 连接的基于 Arduino 的设备。

我想QExtSerialPort在插入时使用(或任何必要的)从我的 Qt 4 应用程序中检测它。

如果这不可能,我想我可以以某种方式获取系统端口名称的列表,然后尝试所有这些名称以搜索我的 Arduino(我将在其中实施某种握手程序以使其正确检测到它)。我对这种方法的担忧是,如果我以不同的波特率发送某种握手确认,我不确定设备(例如打印机)是否会损坏。

所以,我真的不知道从哪里开始。哪个是最好的方法?我将如何实施它?

4

3 回答 3

1

我相信您可以通过查看在Windows上找到串行端口列表

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

注册表项

UNIX系统上的每个串行端口都有一个或多个与之关联的设备文件(/dev 目录中的文件):

System           Port 1           Port 2
IRIX®            /dev/ttyf1       /dev/ttyf2
HP-UX            /dev/tty1p0      /dev/tty2p0
Solaris®/SunOS®  /dev/ttya        /dev/ttyb
Linux®           /dev/ttyS0       /dev/ttyS1
Digital UNIX®    /dev/tty01       /dev/tty02

有关 POSIX 系统上的串行编程的更多详细信息,请点击此处

于 2009-12-30T15:37:33.750 回答
1

由于您的设备是 USB,因此您的 UART 端口将由他的硬件中的某种转换器模拟。因此,首先您必须了解您的系统上使用的是什么驱动程序。

最常见的 SERIAL->USB 转换器使用 PL2303/PL2301 芯片,所以它会在 /dev 上创建一个路径,如果它是第一个设备,它将显示为“/dev/ttyUSB0”,但您也可能会看到列表读取proc 路径(如“cat /proc/bus/usb/devices”)。在 Windows 下,它通常会创建一个虚拟“COM”,只需转到设备管理器并检查端口即可。

当您确定硬件如何与您的系统对话时,您可以使用 QExtSerialPort 包装系统 API 并与设备对话。

于 2010-01-01T13:52:56.490 回答
1

使用奇怪的 Windows 注册表键或依赖 Linux 上的硬连线设备节点太难且太特定于平台。

你走对了。获取 QextSerialPort 或 QSerialDevice(我喜欢在我的项目中使用它,因为它已集成在 Qt5 中),查看示例并简单地使用它。在这两个库中,您都会获得某种端口枚举器类,它会返回所有配置串行端口的列表。仅需要手动进行平台/设备特定设置(例如在我当前的嵌入式项目中将 RS485 设置为半双工模式),但“标准”问题完美地封装在 QIODevice 实现中。

您可以像文件一样使用 QextSerialPort 和 QSerialDevice。打开它(而不是指定设备名称的文件名,即 Windows 上的“COM1”或 Linux 上的“/dev/tty0”,具体取决于您的配置),然后像使用普通 QFile、QBuffer 一样读取或写入, Qwhatever-inherits-from-QIODevice。

如果您在打开端口和通信时遇到任何问题,请不要犹豫!:)

于 2012-10-11T20:02:26.340 回答