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. python类内部方法__setattr__ __getattr_ __delattr__ hasattr __getattribute__ __getitem__(),__setitem__(), __delitem__()

    主要讲类的内部方法 __setattr__  __getattr_  __delattr__  hasattr  __getattribute__  __getitem__(),__setitem__ ...

  2. Ansible playbook编写Apache角色

    编写Apache角色:使用源码安装 在files中下载扩展包和安装包 [root@localhost project]# ls roles/httpd/files/ apr-1.6.5.tar.gz ...

  3. 使用shell+python脚本实现系统监控并发送邮件

    1.编辑shell脚本 [root@web03 ~/monitor_scripts]# cat inspect.sh #!/bin/bash # 设置磁盘的阀值 disk_max=90 # 设置监控i ...

  4. mysql基础之查询缓存、存储引擎

    一.查询缓存 "查询缓存",就是将查询的结果缓存下载,如果查询语句完全相同,则直接返回缓存中的结果. 如果应用程序在某个场景中,需要经常执行大量的相同的查询,而且查询出的数据不会经 ...

  5. 项目实践之工作流引擎基本文档!Activiti工作流框架中流程引擎API和服务详解

    流程引擎的API和服务 流程引擎API(ProcessEngine API)是与Activiti打交道的最常用方式 Activiti从ProcessEngine开始.在ProcessEngine中,可 ...

  6. 【遥感数字图像处理实验】Erdas版详细图文实验教程(8实验全)

    @ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 遥感数字图像的处理,是对遥感数字图像的计算机处理.与工业和医学数字图像不同,遥感数字图像类型更为多样,内容更为复杂.因此,遥感 ...

  7. 【SpringBoot基础系列】手把手实现国际化支持实例开发

    [SpringBoot基础系列]手把手实现国际化支持实例开发 国际化的支持,对于app开发的小伙伴来说应该比价常见了:作为java后端的小伙伴,一般来讲接触国际化的机会不太多,毕竟业务开展到海外的企业 ...

  8. C# HTTP请求对外接口、第三方接口公用类

    /// <summary> /// 网络数据请求公共函数 /// </summary> public class HttpWebRequestCommon { #region ...

  9. Jittor框架API

    Jittor框架API 这里是Jittor主模块的API文档,可以通过import jittor来获取该模块. classjittor.ExitHooks exc_handler(exc_type,  ...

  10. H.264 Video Codec速度和质量

    H.264 Video Codec速度和质量 从Kepler开始的所有 NVIDIA GPUs 都支持完全加速的硬件视频编码: GPUs 从费米开始支持完全加速的硬件视频解码.最近发布的图灵硬件提供了 ...