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方法中灵活了一些,如果第一次使用可能会转不湾来,没有直 ...
随机推荐
- 065.Python框架Django-DRF
一 WEB应用模式 在开发Web应用中,有两种应用模式: 1.1 前后端不分离 1.2 前后端分离 二 API接口 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很 ...
- linux基础之进阶命令二
本节内容 基础命令二: 1. alias:查看和设置别名(alias:别名) alias 'ren=ls -ld' \ren 可不取消别名,执行ren原本的命令 2. unalia ...
- mysql基础之mariadb的安装,连接,用户,密码,权限设置语句详解
一.mariadb安装 1.配置mariadb源: [root@ren7 ~]# vim /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB ...
- linux进阶之gitlab仓库搭建及免密使用
一.Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类 ...
- Centos7 搭建prometheus+Grafana监控
https://baijiahao.baidu.com/s?id=1676883786156871051&wfr=spider&for=pc node scrape_configs ...
- 技术干货 | 如何在 Library 中使用/依赖 mPaaS?
使用场景 在使用 mPaaS 框架过程中,有时需要复用模块.复用时需要按照使用 Module 依赖的方式添加模块.本文以将复用 mPaaS 扫码组件的 Module 为例进行说明. 前提条件 已按照原 ...
- 用华为MindSpore框架训练数据库类型的数据集
技术背景 在前面一篇博客我们讲到三种用python去读取一个文件的指定行的操作,最终给出的一个结论大概是,对于大型的数据而言,最快的找到指定行的方法是Linux系统自带的sed指令,那么是否只有这一种 ...
- .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现
系列目录 [已更新最新开发文章,点击查看详细] TechEmpower Web Framework Benchmarks 是许多Web应用程序框架执行基本任务(如JSON序列化.数据库访问和服 ...
- 3D结构光
3D结构光 3D结构光的整个系统包含结构光投影设备.摄像机.图像采集和处理系统.其过程就是投影设备发射光线到被测物体上,摄像机拍摄在被测物体上形成的三维光图形,拍摄图像经采集处理系统处理后获得被测物体 ...
- CodeGen编写自定义表达式标记
CodeGen编写自定义表达式标记 CodeGen支持开发人员通过编写plug-in modules插件模块来定义自定义表达式标记的能力,以提供与这些标记相关联的逻辑.这种plug-in module ...