qt5.10 串口通信 QSerialPort 的使用

2023-11-08

在qt5中,使用QSerialPort进行串口通信。主要用到的QSerialPort

使用步骤

步骤一:在.pro文件中进行声明

QT += serialport         //在.pro文件中添加这个声明

步骤二:实例化 QSrerialPort

  QSerialPort *serial=new QSerialPort   //实例化QSerialPort 并且开辟空间

步骤三:寻找显示目前的所有串口信息

  foreach(const QSerialPortInfo &portinfo,QSerialPortInfo::availablePorts())
     {
         serial->setPort(portinfo);       //此处的serial是在构造函数中QSerialPort 的对象;
         qDebug()<<serial->portName();
    }  
//第一步:setPort(portinfo)方法,将serial绑定到了其中一个接口上,
//第二步:利用portname将这个串口信息进行查询

步骤四:打开串口

     serial->setPortName("COM7");  //设置串口名称,在第三步,已经能够获取所有的串口信息
     qDebug()<<"打开串口状态"<<serial->open(QIODevice::ReadWrite);//利用open方法,传入参数:打开方式   。并返回打开操作状态,成功打开串口返回true,没有打开串口返回false

步骤五:串口协议设定

void GetData::Init(int baurate, int flow_ctrl, int databits, int stopbits, int parity){
                 //  波特率        数据控制流        数据位          停止位     奇偶校验
  GetData::Open();//如果串口已经打开过,这个可以省略
  //设置波特率
  switch(baurate) //判断波特率,并进行设置。需要注意一点,波特率的值可以直接传入,也可以用qt给的枚举
  {
  case 1200:
      serial->setBaudRate(QSerialPort::Baud1200);
      break;
  case 2400:
      serial->setBaudRate(QSerialPort::Baud2400);
      break;
  case 4800:
      serial->setBaudRate(QSerialPort::Baud4800);
      break;
  case 9600:
      serial->setBaudRate(QSerialPort::Baud9600);
      break;
  case 19200:
      serial->setBaudRate(QSerialPort::Baud19200);
      break;
  case 38400:
      serial->setBaudRate(QSerialPort::Baud38400);
      break;
  case 57600:
      serial->setBaudRate(QSerialPort::Baud57600);
      break;
  case 1382400:
     qDebug()<<"设置波特率状态"<< serial->setBaudRate(1382400);//QSerialPort::Baud115200);
      break;
  default :
      serial->setBaudRate(baurate);
      break;

  }
  //设置数据控制流
  switch (flow_ctrl)   //注意,这里之所以进行判断,是因为QSerialport类中给了枚举,并且设置方法中只能传入枚举参数
      {
      case 0://不使用流控制
          qDebug()<<"流控制设置状态"<<serial->setFlowControl(QSerialPort::NoFlowControl);
          break;
      case 1://使用硬件流控制
          serial->setFlowControl(QSerialPort::HardwareControl);
          break;
      case 2://使用软件流控制
          serial->setFlowControl(QSerialPort::SoftwareControl);
          break;
      default:
          serial->setFlowControl(QSerialPort::UnknownFlowControl);
      }
  //设置数据位
  switch (databits)
  {
  case 5:
     serial->setDataBits(QSerialPort::Data5);
      break;
  case 6:
      serial->setDataBits(QSerialPort::Data6);
      break;
  case 7:
     serial->setDataBits(QSerialPort::Data7);
      break;
  case 8:
      qDebug()<<"设置数据位状态"<<serial->setDataBits(QSerialPort::Data8);
      break;
  default:
      serial->setDataBits(QSerialPort::UnknownDataBits);
     break;
  }
  //设置奇偶效验
  switch (parity)
      {
      case 'n':
      case 'N': //无奇偶校验位。
          serial->setParity(QSerialPort::NoParity);
          break;
      case 'o':
      case 0://设置为奇校验
           qDebug()<<"设置校验位状态"<<serial->setParity(QSerialPort::OddParity);
          break;
      case 'e':
      case 'E'://设置为偶校验
          serial->setParity(QSerialPort::EvenParity);
          break;
      default:
          serial->setParity(QSerialPort::UnknownParity);
          break;
      }
  //设置停止位
  switch(stopbits)
  {
      case 1:  qDebug()<<"设置停止位状态"<<serial->setStopBits(QSerialPort::OneStop); break;
      case 2: serial->setStopBits(QSerialPort::TwoStop); break;
      default : serial->setStopBits(QSerialPort::UnknownStopBits); break;
  }

qDebug()<<"串口初始化执行完成";

}

步骤六:读取数据

void getdata(){ //这个方法是负责接收这个数据
  QByteArray buf_data;        //注意,接收数据时,qByteArray是最常用的类
  qDebug()<<"开始接受数据";    
  buf_data=serial->readAll(); //接收数据
  qDebug()<<"数据接受完成";
  qDebug()<<buf_data.size();
}

connect(serial,SIGNAL(readyRead()),this,SLOT(getdata()));//这是串口信息判断,如果有这个信号发出来,调用getdata接收数据。这里需要注意的是,readyread信号发出,不代表你可以一次性把你所发的数据都接收过来。例如:你发一个字符串“123456789”,它可能会发出两个readyread信号,调用两次getdata方法来获取数据

步骤七:关闭数据


int  GetData::Close(){
  serial->clear(); //清除缓存区
  serial->close();//关闭串口
  return 0;
}

总结:这里暂时没有介绍怎样发数据,而且在数据接受处理上也有很大缺陷,需要后续改善,所以未完待续。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt5.10 串口通信 QSerialPort 的使用 的相关文章

  • C51单片机串口工作的四种方式总结

    方式0 同步移位寄存器输入输出方式 1 利用移位寄存器实现串行 并行的转换 功能 2 波特率 fosc 12 3 RXD P3 0 用于串行数据的输入和输出 TXD P3 1 充当输出的移位时钟 4 数据大小 8位 5 方式0发送 串口接口
  • STM32_USART 串口通讯

    STM32 USART 串口通讯 通信方式的分类 按照通信方式分类 按照数据传送方向分类 通信接口及其说明如下图所示 STM32的串口通信 引脚接线 串口通讯的过程 串口发送数据 串口接收数据 USART中断请求 通信方式的分类 按照通信方
  • Qt5下串口对高频率自发性数据的接收及处理方法

    在项目中需要用Qt5 9采集仪表中的数据 仪表是以200Hz的频率主动向外连续发送数据 发送频率很高 而且主动发送 不需要软件发送一次 再读取一次 而是软件直接读取 这种直接连续读取 有两个关键点 1 如何从接收buffer里面查找出所需的
  • STC15F2K60S2单片机的串口通信程序及相关知识

    一 STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的 且与MCS 51兼容的STC系列单片机 它完全兼容51单片机 是新一代增强型单片机 速度快 抗干扰性强 加密性强 带ADC
  • 单片机实现 printf 打印输出,和电脑端一样用

    在学C语言时 printf 很好用 到了单片机 ARM时却不能用 那因为库中的 printf 是定向打印到显示屏的 所以我们把 printf 重新定向打印到串口就可以了 串口助手中就可以显示打印的内容 这样我们在单片机 ARM中就可以 像电
  • 基于stm32f1的lora开发基础通信实验

    一 实验条件 环境 win10专业版 keil uv5 串口调试助手 stm32f1系列单片机 as32lora模块 这里是泽耀科技的as32 ttl 100 二 实现功能 1 使用定时器将底层数据通过as32每隔1秒向上层串口发送一段数据
  • 西门子PLC各类通信协议差异对比

    西门子PLC有4大类 几十个型号类型 PLC不同所支持的通讯协议也不相同 S7 200系列支持的协议有 PPI MPI PROFIBUS 以太网 S7协议 AS INTERFACE USS MODBUS 自由口 S7 300 400系列支持
  • 蓝桥杯单片机学习过程记录(二十八)第五届国赛串口通信相关代码补充

    蓝桥杯单片机学习过程记录 二十八 第五届国赛串口通信相关代码补充 UART串口通信 第五届国赛uart串口内容相关补充 设置数组存储输入输入字符 并与设定的密码相判断 include
  • qt中的线程

    目前我暂时会两种线程方式 一种是继承QTHRead 另一种是movetothread 相对二样 第二种好一些 先来介绍一下第一个方法 继承QTHread public A QThread void run 重新run函数 public B
  • 用虚拟串口进行串口调试

    由于现在的笔记本电脑一般不带有串口 再进行串口调试时 可以用虚拟串口代替 虚拟串口下载链接 虚拟串口 Win7 下载 串口调试助手下载链接 串口调试助手 VS2010串口程序 使用的unicode库 纯API 不利用Mscomm控件 下载链
  • USB转RS485串口电路设计

    USB转串口芯片的串口信号一般为 TTL CMOS电平 在实现半双工 RS485 串口时需要外接485电平转换芯片 设计中需要有信号来控制 485 转接芯片的发送和接收使能端 建议选择自带485控制引脚的转接芯片 如 CH340 CH342
  • CSerialPort教程4.3.x (1) - CSerialPort项目简介

    CSerialPort教程4 3 x 1 CSerialPort项目简介 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Java Python Node
  • 关于STM32串口接收中断中只能接收一个字节()

    最近调试STM32的串口接收时发现例程中只能接收一个字节 例程如下 1 初始化串口1 2 void uart init u32 bound 3 GPIO端口设置 4 GPIO InitTypeDef GPIO InitStructure 5
  • Arduino基础篇(五)-- 如何快速上手串口通信(Serial)

    文章目录 1 基础篇 1 1 通信基础 2 串口通信 2 1 Arduino串口的硬件结构 2 2 串口工作原理 2 3 硬件串口通信 2 4 软件模拟串口通信 1 基础篇 1 1 通信基础 1 并行通信 通过输入 输出端口在 Arduin
  • Ubuntu+Python环境做上位机

    最近需要制作程控电阻箱的上位机 使得大学毕业后就不再接触硬件的我无从下手 拿到机器后不知道怎么与其进行通信 Google上的资料也很少 现将我的环境搭建过程记录下来 希望对和我一样的小白有所帮助 软件环境 Ubuntu 16 04 pyth
  • STM32串口配置实验

    STM32 串口简介 串口作为 MCU 的重要外部接口 同时也是软件开发重要的调试手段 其重要性不言而喻 现在基本上所有的 MCU 都会带有串口 STM32 自然也不例外 STM32 的串口资源相当丰富的 功能也相当强劲 ALIENTEK
  • QT Modbus RTU调试助手(包含算法实现CRC MODBUS16校验)

    QT Modbus RTU调试助手 在类构造函数中将UI初始化和串口对象定义以及查找串口 串口设置 串口接受 QT延时函数 CRC校验 发送串口数据函数 总结 在类构造函数中将UI初始化和串口对象定义以及查找串口 foreach const
  • 基于STM32F103RB的模拟液位检测告警系统(已实现)

    这次先看一下老朋友STM32 有关Zigbee的内容 Z stack协议栈和基于Zigbee的环境温湿度 烟雾传感器的环境监测系统 等有时间再更 基于STM32的模拟液位检测告警系统 记得好像是某一届蓝桥杯省赛题 基于STM32告警系统介绍
  • 【嵌入式基础】串口通信

    目录 1 前言 2 基本概念 2 1 波特率 2 2 起始位 2 3 数据位 2 4 校验位 2 5 停止位 2 6 空闲位 3 工作模式 3 1 单工模式 3 2 半双工模式 3 3 全双工模式 4 同步通信和异步通信 4 1 同步通信
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速

随机推荐

  • JS实现直接插入排序

    直接插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴 但它的原理应该是最容易理解的了 因为只要打过扑克牌的人都应该能够秒懂 插入排序是一种最简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中
  • 浅谈BCrypt算法

    文章目录 前言 一 BCrypt算法是什么 二 使用步骤 1 对明文进行加密 2 验证 总结 前言 BCrypt算法是一种基于哈希算法的算法 所以 这种算法是不可逆的 一 BCrypt算法是什么 BCrypt算法是一种基于哈希算法的算法 所
  • 重复代码(克隆代码)的几个概念与类型

    本文内容来源于以下两篇参考文献 1 Chanchal K Roy James R Cordy Rainer Koschke Comparison and Evaluation of Code Clone Detection Techniqu
  • C++中的生命周期

    类A 含构造函数和析构函数 普通函数fun 函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObj main方法新建了类A的局部自动对象MainObj 调用fun方法 外面新建了A的的外部静态对象ExStaObj和外部对
  • echarts图环形图带百分比

    前言 整理一些echarts中比较有个性的 效果图 实现代码 option tooltip trigger item formatter a br b c d legend orient vertical left 10 data 直达 营
  • 计算机电缆外径相差太大,DJYPVP计算机电缆标准外径

    计算机电缆用途 本产品适用于额定电压30 500v及以下防干扰性能要求较高的电子计算机 检测仪器 仪表的连接 使用条件 计算机电缆 电压等级 0 45 0 75KV 企标 本产品使用于交流额定电压为300 500及以下 对于防干扰性能要求高
  • Could not get a resource from the pool 错误解决

    Could not get a resource from the pool 错误解决 错误信息 Could not get a resource from the pool 可能造成错误原因 1 没关闭Linux防火墙 查看防火墙状态 s
  • 10 个最适合开发人员的 GitHub 代码库 ✅

    在 GitHub 的帮助下 开发人员可以轻松访问并与他人共享他们的代码 它已成为开发人员在项目上进行协作并了解最新开发趋势的重要工具 对于开发人员而言 GitHub 是寻找最佳存储库以帮助他们完成开发项目的宝贵资源 有这么多可用的存储库 可
  • Intellij IDEA 中的 Debug 控制台/ Debug 控制台的 out 窗口不见了

    1 问题 Debug 控制台 Debug 控制台的 out 窗口不见了 2 问题解决方法 显示debug窗口 3 点击后 4 如果要恢复默认窗口布局 重新启动tomcat
  • 基于java车辆监管系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java车辆监管系统计算机毕业设计源码 系统 lw文档 mysql数据库 调试部署 基于java车辆监管系统计算机毕业设计源码 系统 lw文档 mysql数据库 调试部署 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发
  • git. 常用操作总结

    TOC GIT指南 在GIT中任何已经提交的东西几乎总是可以恢复的 甚至那些被删除的分支中的提交或使用 amend选项覆盖的提交也可以恢复 然而任何你未提交的东西丢失后很可能再也找不到 git pull会抓取所有的远程引用 Git在进行提交
  • 【通原】采样频率往往高于原信号的2倍的原因

    采样信号不是理想冲激信号 在采样前 需要添加一个抗混叠滤波器以避免频谱混叠 带宽越低越难设计 因此采样频率设计为原信号的3 5倍
  • paddleoc onnx转换推理

    目录 paddle 文字识别验证代码 onnx c 推理 python onnx识别部分推理示例 感谢博客 PaddleOCR转ONNX模型 推理部分 favorxin的博客 CSDN博客 paddleocr转onnx paddle 文字识
  • 2023年场外个股期权研究报告

    第一章 概况 场外个股期权 Over the Counter Equity Option 是指由交易双方根据自己的需求和意愿 通过协商确定行权价格 行权日期等条款的股票期权 与交易所交易的标准化期权不同 场外个股期权的合同内容可以根据交易双
  • .NET MVC标签扩展(checkbox,radio)

    NET MVC里面自动绑定form表单功能 如 Html TextBox Name Html Hidden hide 名称会自动与后台就行绑定ViewBag Name ViewBag hide 很实用 但是感觉不足的就是 Html Chec
  • Redis学习笔记(转尚硅谷周阳)

    教学视频 Redis官网 Redis中文官网 一 NoSQL入门概述 上 1 互联网时代背景下大机遇 为什么用NoSQL 1 1 单机MySQL的美好年代 在90年代 一个网站的访问量一般都不大 用单个数据库完全可以轻松应付 在那个时候 更
  • 整形提升和数据截断

    整形提升和截断 1 整形提升 2 截断 1 整形提升 提升是将占字节小的元素赋给占字节大的元素时出现的补位现象 截断是将所占字节大的元素赋给所占字节小的元素时会出现数值的舍去现象 下面看代码来分析 include
  • html的日期选择插件

    1 效果 2 文档 https layui gitee io v2 docs 3 引入 官网地址 https layui gitee io v2 引入 在官网下载 jquery 1 7 2 min js layui layui js 4 使
  • 绘制坐标轴:Python实现

    绘制坐标轴 Python实现 在数据可视化领域 坐标轴是一种重要的图形元素 用于显示数据的分布和趋势 Python提供了多种库和工具 可以方便地绘制坐标轴和相关图表 本文将介绍如何使用Python实现绘制坐标轴的功能 并提供相应的源代码示例
  • qt5.10 串口通信 QSerialPort 的使用

    在qt5中 使用QSerialPort进行串口通信 主要用到的QSerialPort 使用步骤 步骤一 在 pro文件中进行声明 QT serialport 在 pro文件中添加这个声明 步骤二 实例化 QSrerialPort QSeri