一、QtSerialPort简介

1、串口通信基础

目前使用最广泛的串口为DB9接口,适用于较近距离的通信。一般小于10米。DB9接口有9个针脚。

串口通信的主要参数如下:

A、波特率:衡量通信速度的参数,表示每秒钟传送的bit的个数。例如9600波特表示每秒钟发送9600个bit。

B、数据位:衡量通信中实际数据位的参数,当计算机发送一个信息包,实际包含的有效数据位个数。

C、停止位:用于表示单个包的最后一位。典型的值为1和2位。

D、奇偶校验位:串口通信中一种检错方式。常用的检错方式有:偶、奇校验。

2、QtSerialPort模块简介

QtSerialPort模块是QT5中附加模块的一个模块,为硬件和虚拟的串口提供统一的接口。
        串口由于其简单和可靠,目前在像嵌入式系统、机器人等工业中依旧用得很多。使用QtSerialPort模块,开发者可以大大缩短开发串口相关的应用程的周期。

Qt SerialPort提供了基本的功能,包括配置、I/O操作、获取和设置RS-232引脚的信号。

Qt SerialPort模块暂不支持以下特性:
A、终端的特性,例如回显,控制CR/LF等等
B、文本模式
C、读或写操作的超时和延时配置
D、当RS-232引脚信号变化通知
要在应用程序中使用QtSerialPort,需要包括如下的声明:

#include <QtSerialPort/QtSerialPort>

要链接QtSerialPort模块,需要在.pro文件中添加如下内容:

QT += serialport

二、QSerialPort

1、QSerialPort简介

QSerialPort提供了访问串口的接口函数。使用辅助类QSerialPortInfo可以获取可用的串口信息。将QSerialPortInfo辅助类对象做为参数,使用setPort()或setPortName函数可以设置要访问的串口设备。

设置好端口后,可以使用open()函数以只读、只写或读写的模式打开使用。

注意,串口使用独占方式打开。

使用close()函数关闭串口并且取消IO操作。

串口成功打开后,QSerialPort会尝试确定串口的当前配置并初始化。可以使用setBaudRate、setDataBits、setParity、setStopBits和setFlowControl函数重新配置端口设置。

有一对名为QSerialPort::dataTerminalReady、QSerialPort::requestToSend的属性

QSerialPort提供了中止正在调用线程直到信号触发的一系列函数。这些函数用于阻塞串口。

waitForReadyRead:阻塞调用,直到有新的数据可读

waitForBytesWritten:阻塞调用,直到数据以及写入串口

阻塞串口编程与非阻塞串口编程完全不同。阻塞串口不会要求时间循环并且通常会简化代码。然而,在GUI程序中,为了避免冻结用户界面,阻塞串口编程只能用于非GUI线程。

QSerialPort也能使用QTextStream和QDataStream的流操作符。在试图使用流操作符>>读时,需要确保有足够可用的数据。

2、QSerialPort成员函数

QSerialPort::QSerialPort(QObject *parent = Q_NULLPTR)QSerialPort::QSerialPort(const QString &name, QObject *parent = Q_NULLPTR)QSerialPort::QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = Q_NULLPTR)

构造函数

[virtual] bool QSerialPort::atEnd() const

如果当前没有数据可读,返回true

[signal] void QSerialPort::baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

波特率改变后,信号触发

[virtual] qint64 QSerialPort::bytesAvailable() const

返回可读数据的字节数

[virtual] qint64 QSerialPort::bytesToWrite() const

返回可写数据的字节数

[virtual] void QSerialPort::close()

关闭串口

void QSerialPort::setPort(const QSerialPortInfo &serialPortInfo)

设置串口端口信息为serialPortInfo

void QSerialPort::setPortName(const QString &name)

设置串口名为name

三、QSerialPortInfo

1、QSerialPortInfo简介

QSerialPortInfo类提供已有串口设备的信息。使用QSerialPortInfo类的静态成员函数生成QSerialPortInfo对象的链表。链表中的每个QSerialPortInfo对象代表一个串口,每个串口可以使用端口名、系统定位、描述、制造商查询。QSerialPortInfo类对象也可以用做QSerialPort类的setPort()成员函数的参数。

2、QSerialPortInfo成员函数

QSerialPortInfo::QSerialPortInfo(const QSerialPort &port)QSerialPortInfo::QSerialPortInfo(const QString &name)QSerialPortInfo::QSerialPortInfo(const QSerialPortInfo &other)

构造函数

[static] QList<QSerialPortInfo> QSerialPortInfo::availablePorts()

返回当前系统可用串口的链表

QString QSerialPortInfo::description() const

如果串口可用,返回串口的描述信息

bool QSerialPortInfo::hasProductIdentifier() const

如果有一个合法的16位生产码,返回true

bool QSerialPortInfo::hasVendorIdentifier() const

如果有一个合法的16位制造商编码,返回true

bool QSerialPortInfo::isBusy() const

如果串口当前正忙,返回true

QString QSerialPortInfo::manufacturer() const

如果串口可用,返回串口的制造商的名字

QString QSerialPortInfo::portName() const

返回串口的名字

quint16 QSerialPortInfo::productIdentifier() const

如果串口可用,返回串口的16位的生产编码

QString QSerialPortInfo::serialNumber() const

如果串口可用,返回串口的序列号

[static] QList<qint32> QSerialPortInfo::standardBaudRates()

返回目标平台支持的可用的标准波特率的链表

void QSerialPortInfo::swap(QSerialPortInfo &other)

使用other交换QSerialPortInfo对象

QString QSerialPortInfo::systemLocation() const

返回串口的系统位置

quint16 QSerialPortInfo::vendorIdentifier() const

如果串口可用,返回16位的制造商编码

3、QSerialPortInfo显示串口信息实例

#include <QCoreApplication>
#include <QtSerialPort/QtSerialPort>
#include <QList>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QList<QSerialPortInfo> list = QSerialPortInfo::availablePorts();qDebug() << "Total number of availiable ports:" << list.count();foreach(const QSerialPortInfo &serialportinfo, list){qDebug() << "Port: " << serialportinfo.portName();qDebug() << "Location: " << serialportinfo.systemLocation();qDebug() << "Description: " << serialportinfo.description();qDebug() << "Manufactutor: " << serialportinfo.manufacturer();qDebug() << "Vendor Indentifier: " << serialportinfo.vendorIdentifier();qDebug() << "Busy: " << serialportinfo.isBusy();}return a.exec();
}

Hello Qt(四十六)——QT串口编程基础相关推荐

  1. Python学习笔记(四十六)网络编程(2)— UDP编程

    摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320049779 ...

  2. Java从零开始学四十五(Socket编程基础)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  3. QT开发(五十)——QT串口编程基础

    QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要 ...

  4. 四十六、深入Java的网络编程(下篇)

    @Author:Runsen @Date:2020/6/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  5. oracle过滤器基础,Oracle培训(四十六)——Servlet第六章知识点总结——过滤器编程...

    Oracle培训(四十六)--Servlet第六章知识点总结--过滤器编程 目标 编写一个过滤器 部署一个过滤器 了解请求和响应包装器 在请求分发器下的过滤器 知识点预览 过滤器 过滤器 1. 什么是 ...

  6. Qt OpenGL(三十六)——Qt OpenGL 核心模式-绘制雷达坐标系

    提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(三十六)--Qt OpenGL 核心模式-绘制雷达坐标系 一.场景 ...

  7. Python编程基础:第四十六节 super函数Super Function

    第四十六节 super函数Super Function 前言 实践 前言 使用super函数可以在子类中直接调用父类的方法.通常情况下,我们会将一些通用的属性或方法定义在父类中,子类可以直接使用父类中 ...

  8. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  9. pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  10. abd shell关闭所有程序_第十六章 Shell编程

    第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...

最新文章

  1. swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...
  2. 统计和生成所有不同的二叉树
  3. webuploader在bootstrap模态对话框中选择文件按钮无效的问题
  4. 数据库工程开发秘籍之TSQL 存储过程user stored procedure的概念与案例实战
  5. 将窗体显示在 PageControl 上。
  6. [精选代码笔记]Anagram, group-anagrams, two sum
  7. 如何解决 Angular custom library module 在 ng build 时无法被识别的错误
  8. 比较笨的中文预处理 python
  9. [air for ios] 三小时开发一个iOS飞行射击游戏
  10. jQuery firefox chrome IE 绑定mousewheel事件
  11. 通用窗口类 Inventory Pro 2.1.2 Demo1(上)
  12. centos7全盘备份到本地_centos7磁盘备份和还原
  13. 机器学习初学者入门实践:怎样轻松创造高精度分类网络
  14. Pygame安装教程及基本配置(详细图文)
  15. 正好配资在线开户叶飞带崩小票
  16. input主动获取焦点
  17. 解决ubuntu18.04打不开网易云音乐(亲测可行!
  18. Janus的STUN原理与抓包分析
  19. 吴恩达deeplearning.ai深度学习课程空白作业
  20. linux测网速几种方式

热门文章

  1. adb打开网页_关于ADB,请教如何通过指定APP打开目标网页
  2. java mybatis 批量更新数据_Mybatis批量更新详解
  3. EasyExcel——多sheet、有合并单元格的excel导入
  4. 千千静听被拖到桌面之外的解决办法
  5. 幽情阁--Java8系列之Nashorn JavaScript(六)
  6. java基础-哈希映射和哈希集
  7. temps matlab,matlab插值方法PPT演示文稿
  8. 线性代数学习笔记5-1:正交的向量/空间、正交补(行空间和零空间正交)
  9. 大班体育游戏电子计算机教案,大班体育游戏活动教案《》
  10. DELL服务器如何做raid-5