openmv串口数据 串口助手_Qt实践录:串口调试助手

由于项目需要使用到串口调试及测试,为了练手,使用 Qt 编写一个串口调试助手。本文按开发的过程进行简单介绍,同时也涉及部分用到的模块代码。详细代码参考源码仓库。

# 工具特性

## 具体功能

- 具备串口收发功能。

- 串口参数设置。默认115200,N,8,1

- 接收区清空,接收区十六进制显示,接收区时间戳。

- 发送区清空,十六进制发送,自动追加``,定时发送。

- 收发计数显示及清零。

- 串口设备自动检测。运行前串口就绪则自动打开。运行中串口插入不会自动打开。运行过程中拔出设备则自动关闭串口。

## 已知 Bug

接收区时间戳显示不完善。

串口发送大量乱码时,程序会崩溃。乱码可能是真的乱码,也可能是波特率错误设置。

## Qt 相关知识

- MainWindow设计。

- Qt串口类。

- 常用控件:按钮、复选框、文本编辑框、控件贴图。应用程序logo。

- Qt 检测设备热插拔(Windows)。

运行结果如图1所示:

d69d22e758c5a4af233b0dfcb700543d.png

仓库地址在此: https://github.com/latelee/QtSerialPort。

# 开发过程

## 工程相关

Qt 使用的串口类为`QSerialPort`,需要在工程文件中添加对应的库,如下:

```

QT += core gui serialport

```

logo图标,注意是 ico 格式:

```

RC_ICONS = images/logo.ico

```

图片资源文件:

```

RESOURCES +=

images.qrc

```

USB 设备检测依赖的库:

```

win32: LIBS += -lSetupAPI -luser32

```

## 信号与槽

在 Qt Creator 中添加的控件,可点击控件右键,选择“转到槽...”,选择适合的槽,点击“OK”,可自动添加槽函数声明,并自动跳转到槽函数实现代码。系统自动添加的形式为`on__`,如打开串口的按钮单击事件槽函数为`on_btnOpen_clicked`。类似有`on_cbPortName_currentTextChanged`(串口设备更改)、`on_ckRecvHex_stateChanged`(接收十六进制复选框变更),等等。

此机制及操作方式,可类比于 MFC 的界面设计和消息响应。实际上,笔者喜欢将槽函数称为响应函数。

## 串口相关

串口类声明:

```

#include

#include

QSerialPort serial;

```

枚举本机串口设备:

```

QSerialPortInfo::availablePorts()

```

串口参数设置:

```

serial.setPortName("com4"); // 串口名称

serial.setBaudRate(115200); // 串口波特率

serial.setDataBits(QSerialPort::Data8); // 数据位

serial.setStopBits(QSerialPort::OneStop); // 停止位

serial.setParity(QSerialPort::NoParity); // 校验位

serial.setFlowControl(QSerialPort::NoFlowControl); // 流控

```

注:Qt 似乎只有无流控、软件流控、硬件流控这三种,无法区分 RTS、DTR。

串口打开、关闭:

```

serial.open(QIODevice::ReadWrite);

serial.close();

```

串口数据发送:

```

QByteArray sendData;

serial.write(sendData);

```

串口数据接收:

```

// 串口数据到来时,会触发QSerialPort::readyRead事件,添加相应的响应函数

QObject::connect(&serial, &QSerialPort::readyRead, this, &MainWindow::readyRead);

void MainWindow::readyRead()

{

QByteArray buffer = serial.readAll();

}

```

注意,串口数据类型为`QByteArray`。

## 自动检测 USB

鉴于目前大部分场合使用的是 USB 串口线,所以添加对 USB 设备的检测。这里检测到 USB 设备时,再使用`QSerialPortInfo::availablePorts()`检测串口设备。

```

#include

#include

#include

#include

#include

#include

static const GUID GUID_DEVINTERFACE_LIST[] =

{

// GUID_DEVINTERFACE_USB_DEVICE

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值