QT 串口通讯(单串口单线程)

串口通讯在我们写程序的时候或多或少会用到,借此在这记录一下QT是如何使用串口来通讯的。本次先侃侃在单线程下使用1个串口来通讯过程。好了,废话不多说,直接看步骤,我们的宗旨是先用了在说,记住步骤即可。

一共分为6步骤;

第1步(必须):在.pro 文件下加入这句,不加入这句,会找不到头文件哦(加入以后记得清理一下项目,然后再重新qmake一下项目)

QT       += serialport

第2步(必须):在头文件.h中加入这个

#include <QSerialPort>
#include <QSerialPortInfo>

第3步(非必须):查找一下可用的串口号,这步骤非必须的,有时候你想实现动态检查热插拔时可用得上,后面我再整理

QStringList allPort;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){

    allPort << info.portName(); //所有可用的串口号都在allPort里面啦

}

第4步(必须):打开串口,比如这里打开一个COM1,如果没有打开成功,那可能COM1被使用了,要不就是COM1不存在啦

QSerialPort *m_serial = new QSerialPort;
m_serial->setPortName("COM1");//串口名字
m_serial->setBaudRate(QSerialPort::Baud38400); //波特率
m_serial->setDataBits(QSerialPort::Data8); //8个数据位
m_serial->setStopBits(QSerialPort::OneStop); //1个停止位
m_serial->setParity(QSerialPort::NoParity); //无校验
m_serial->setFlowControl(QSerialPort::NoFlowControl); //不适用流控制
if(m_serial->open(QIODevice::ReadWrite)){
qDebug()<<"串口打开成功";
}

第5步(必须):收发数据,假设COM1已经被我们成功打开了,接下来我们就开始读写啦。

  1>首先是写操作,写操作比较简单,只管发送就行了。

QString str = "Hi';
m_serial->write(str.toUtf8().data());
m_serial->waitForBytesWritten(10); //记得要加入这一句哦,等待数据写入串口

  2>然后是读操作。读操作麻烦些,但也很简单。

    串口类里面有个信号是检测到串口有数据就会发出来,所以我们就采用信号槽方式来做,当然也你也可以不用直接用while循环一    直检测read()函数直到有数据为止。但是没有信号槽这么方便;

   

connect(m_serial,&QSerialPort::readyRead,this,&ThreadSerialPort::onReadyData);

  *****onReadyData槽函数定义:

void ThreadSerialPort::onReadyData()
{
QByteArray temp = m_serial->readAll();
QString data = temp.toHex();
qDebug() << "接受到数据:" << data; }

  

*****这里解释一下第5步接受数据的过程:1.首先进行信号槽连接,2只要串口检测到有数据就会发出readyRead信号,然后我们就开始调用readAll函数读取串口的数据。这样我们就接受到目标机通过串口给我们发来的数据啦

第6步(必须):关闭串口,清理对象资源

m_serial->close();
delete m_serial;

  

总结:好啦,这就是在QT环境下的一个串口通信过程啦,总的来说还是比较简单的,一共6个步骤,后期再讲解复杂一点串口通信。

 

Qt之先用了再说系列-串口通讯(单串口单线程)的更多相关文章

  1. [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计

    目       录 第三章           设备驱动的设计... 2 3.1           初始化设备... 4 3.2           运行设备接口设计... 4 3.3        ...

  2. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

  3. 使用Xamarin实现串口通讯

    前几天我写了年度总结,然后有人说让我教一下他Xamarin串口通讯怎么做,其实跟java没有多大区别. 记得我刚开始接到公司这个项目的时候很懵逼,我去看了别的安卓串口工具,都不行我当时是RS232串口 ...

  4. 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现

    目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...

  5. 树莓派中QT实现串口通讯

    树莓派中QT实现串口通讯 开发平台为QT 此博客QT使用的为WiringPi驱动 我使用的串口调试助手为 cutecom 先简单说一些开发过程中需要注意的问题 Linux 下设备为 tty ,对应在 ...

  6. C# 串口操作系列(5)--通讯库雏形

    C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报  分类: 通讯类库设计(4 ...

  7. 第20章 USART—串口通讯—零死角玩转STM32-F429系列

    第20章      USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  8. qt实现串口通讯

    摘要:上位机软件程序通过QT实现,采集输入信息,根据实际需要做出合适的串口通讯协议,实现效果如下图所示: 主要实现的功能: 1.串口基本参数可选,可调 2.显示区域可选择十六进制/asicii码显示, ...

  9. Qt之先用了再说系列-多线程方式2

    继Qt之先用了再说系列-多线程方式2 本次说说在Qt里多线程使用第2种方式,也是qt官方比较推荐用的方式,相对与直接继承QThread 重写run方法中灵活了一些,如果第一次使用可能会转不湾来,没有直 ...

随机推荐

  1. [Java] 类库例题

    例1 字符串操作 定义一个StringBuffer类对象,然后通过append()方法向对象中添加26个小写字母,每次只添加一次,共添加26次,然后按逆序方式输出,并且可以删除前5个字符 面向过程实现 ...

  2. mysql 无法执行select查询

    场景:mysql无法执行select命令查询,对于已存在的数据库,除了mysql.information_schema数据库,其它诸如nova.keystone.cinder等数据库都有此现象. 日志 ...

  3. 3.2-3 tac、more

    3.2 tac命令 是cat的反向拼写,因此命令的功能为反向显示文件内容.cat命令是从第一行开始读取文本输出的,而tac则是从最后一行开始读取文本并进行反向输出,需要注意的是,2个命令都是以一行文本 ...

  4. 分布式锁中的王者方案-Redisson

    上篇讲解了如何用 Redis 实现分布式锁的五种方案,但我们还是有更优的王者方案,就是用 Redisson. 缓存系列文章: 缓存实战(一):20 图 |6 千字|缓存实战(上篇) 缓存实战(二):R ...

  5. 『动善时』JMeter基础 — 24、JMeter中使用“用户参数”实现参数化

    目录 1.用户参数组件介绍 2.用户参数界面介绍 3.使用"用户参数"组件实现参数化 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)用户参数组 ...

  6. 技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

    前言 在部分场景下,需要向小程序的默认接收页(pages/index/index)传递参数. 本文将以传递 name 和 pwd 参数为例,分别介绍此场景在 Android 小程序和 iOS 小程序中 ...

  7. 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...

  8. 缩放 transform

    转换属性 transform 转换是css3中的一个特征,可以实现元素的缩放,位移,变形. 作用: 使元素在位置或者形状上发生一定的改变. 属性: transform 属性值: scale:缩放(一般 ...

  9. 实现不同VLAN间的通信(单臂路由和链路聚合)

    单臂路由与链路聚合 1.单臂路由 1.1 链路类型 1.2 子接口 2. 链路捆绑 1.单臂路由 是指在路由器的一个接口上通过配置子接口,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通. ...

  10. 微调BERT:序列级和令牌级应用程序

    微调BERT:序列级和令牌级应用程序 Fine-Tuning BERT for Sequence-Level and Token-Level Applications 为自然语言处理应用程序设计了不同 ...