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. [刷题] 3 Longest Substring Without Repeating Character

    要求 在一个字符串中寻找没有重复字母的最长子串 举例 输入:abcabcbb 输出:abc 细节 字符集?字母?数字+字母?ASCII? 大小写是否敏感? 思路 滑动窗口 如果当前窗口没有重复字母,j ...

  2. [转载]libvirt(virsh命令总结)

    libvirt(virsh命令总结) virsh回车进入交互式界面: version pwd hostname 显示本节点主机名 nodeinfo  显示节点信息 list --all 显示所有云主机 ...

  3. 【转载】使用rdp协议访问远程Linux桌面

    使用rdp协议访问远程Linux桌面 2017年03月31日 16:23:49 太阳之影 阅读数:2169   一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需 ...

  4. HAProxy与LVS综合----搭建LNMP源码编译结合HAProxy或LVS负载均衡

    实战一:实现LNMP与Keepalived.HAProxy做反向代理 框架图: 实现原理: 1.当A用户访问网站时,此时需要经过防火墙,防火墙将用户访问的IP地址处理后,如果允许访问,则就访问到HAr ...

  5. Linux_yum仓库管理

    一.yum配置本地仓库 1.挂载光盘 [root@localhost ~]# mount /dev/sr0 /mnt/ [root@localhost ~]# df -hT 文件系统 类型 容量 已用 ...

  6. 使用 .NET 升级助手将.NET Framework应用迁移到.NET 5

    从.NET Framework 迁移到.NET 5 犹如搬家,我们都知道搬家是很痛苦的,我们请求搬家公司来减轻我们的压力,.NET 升级助手 的作用就类似我们聘请的搬家公司,帮助我们处理繁重乏味的迁移 ...

  7. thinkphp api接口 统一结果返回处理类

    20210602 修正 wqy的笔记:http://www.upwqy.com/details/216.html 返回结果处理,归根结底 主要是有两点 数据结构和返回的数据类型 1.数据类型 :一般情 ...

  8. Web前端自动化测试Cypress实践总结

    本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中. 一.自动化测试概述 为了保障软件质量,并减少重复性的测试 ...

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

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

  10. QCon笔记~《天下武功,唯快不破——面向云原生应用的Java冷启动加速技术》

    上周去听了QCon全球开发大会,其中有几场印象比较深刻的分享,除去几个比较概念化的话题,在Java技术演进这个Topic里的几个分享都是比较有干货的(但感觉工作中用不到) 首先是关于林子熠老师分享的冷 ...