Qt之先用了再说系列-串口通讯(单串口单线程)
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之先用了再说系列-串口通讯(单串口单线程)的更多相关文章
- [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计
		目 录 第三章 设备驱动的设计... 2 3.1 初始化设备... 4 3.2 运行设备接口设计... 4 3.3 ... 
- .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用
		目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ... 
- 使用Xamarin实现串口通讯
		前几天我写了年度总结,然后有人说让我教一下他Xamarin串口通讯怎么做,其实跟java没有多大区别. 记得我刚开始接到公司这个项目的时候很懵逼,我去看了别的安卓串口工具,都不行我当时是RS232串口 ... 
- 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现
		目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ... 
- 树莓派中QT实现串口通讯
		树莓派中QT实现串口通讯 开发平台为QT 此博客QT使用的为WiringPi驱动 我使用的串口调试助手为 cutecom 先简单说一些开发过程中需要注意的问题 Linux 下设备为 tty ,对应在 ... 
- C# 串口操作系列(5)--通讯库雏形
		C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报 分类: 通讯类库设计(4 ... 
- 第20章 	 USART—串口通讯—零死角玩转STM32-F429系列
		第20章 USART—串口通讯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ... 
- qt实现串口通讯
		摘要:上位机软件程序通过QT实现,采集输入信息,根据实际需要做出合适的串口通讯协议,实现效果如下图所示: 主要实现的功能: 1.串口基本参数可选,可调 2.显示区域可选择十六进制/asicii码显示, ... 
- Qt之先用了再说系列-多线程方式2
		继Qt之先用了再说系列-多线程方式2 本次说说在Qt里多线程使用第2种方式,也是qt官方比较推荐用的方式,相对与直接继承QThread 重写run方法中灵活了一些,如果第一次使用可能会转不湾来,没有直 ... 
随机推荐
- [bug] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full
			原因 lib文件缺失 参考 https://blog.csdn.net/weixin_41060905/article/details/86911172 
- linux使用createrepo制作本地yum源
			目录 linux使用createrepo制作本地yum源 安装createrepo软件包 进入本地rpm包目录 执行完后可以看到生成的repodata目录 编辑yum配置文件使用 完成,测试使用 关于 ... 
- nginx 的常用模块
			nginx的常用模块 ngx_http_index_module Syntax: index file ...; Default: index index.html; Context: http, s ... 
- STM32 中的CEC
			http://www.cnblogs.com/qdrs/articles/7645117.html 
- CAP理论之思考
			分布式系统的最大难点就是各个节点如何保持一致.最近我在工作中就遇到这样的问题,不同节点之间,彼此通过API,进行通信,交互数据,但有些服务节点存在延迟等问题,导致我看到的并不是实时的数据,以及系统更新 ... 
- 达梦数据库产品支持技术学习分享_Week1
			本周主要从以下几个方面进行本人对达梦数据库学习的分享,学习进度和学习情况因人而异,仅供参考. 一.达梦数据库的体系架构 二.达梦数据库的安装 三.达梦数据库的数据类型 四.达梦数据库的DDL.DML. ... 
- TVM代码生成codegen
			TVM代码生成codegen 硬件后端提供程序(例如Intel,NVIDIA,ARM等),提供诸如cuBLAS或cuDNN之类的内核库以及许多常用的深度学习内核,或者提供框架例,如带有图形引擎的DNN ... 
- CPU/GPU/TPU/NPU...XPU都是什么意思?
			CPU/GPU/TPU/NPU...XPU都是什么意思? 现在这年代,技术日新月异,物联网.人工智能.深度学习等概念遍地开花,各类芯片名词GPU, TPU, NPU,DPU层出不穷......都是什么 ... 
- ARM CPU自动调度神经网络
			ARM CPU自动调度神经网络 对特定设备和工作负载进行自动调度,对于获得最佳性能至关重要.通过RPC使用自动调度器为ARM CPU调度整个神经网络. 为了自动调度神经网络,将网络划分为小的子图,进行 ... 
- TensorFlow损失函数
			TensorFlow损失函数 正如前面所讨论的,在回归中定义了损失函数或目标函数,其目的是找到使损失最小化的系数.本文将介绍如何在 TensorFlow 中定义损失函数,并根据问题选择合适的损失函数. ... 
