Qt学习 打开串口,从串口获取数据(QSerialPort,QSerialPortInfo),串口使用

本文详细介绍了在Qt环境中使用QSerialPort和QSerialPortInfo进行串口通信的配置步骤。首先,需要在工程文件中启用serialport模块。接着,通过QSerialPortInfo获取可用串口信息,并选择特定串口。然后,设置串口参数如波特率、数据位等,并打开串口。最后,实现串口数据的读取。代码示例展示了如何查找、配置和读取串口数据。
摘要由CSDN通过智能技术生成

配置工程文件

Qt中的串口使用QSerialPort,QSerialPortInfo两个类,而这两个类的使用必须在工程文件中加入 serialport模块,也就是串口模块。

QT += serialport

包含头文件

两个类的作用
QSerialPort类:提供访问串口的功能。使用串口必需实例化一个QSerialPort类,通过实例化的对象,配置参数。
QSerialPortInfo类:提供现有串口信息,使用这个类可以搜寻计算机可用串口的信息,从而选择你所需要的串口。
代码如下

#include<QSerialPortInfo>
#include<QSerialPort>

头文件

在头文件中加入以下代码

 QSerialPortInfo *SerialPortInfo=NULL;
 QSerialPort SerialPort;

代码块

包含头文件

#include <QList>
#include<QDebug>

获取可用串口信息,这里输出的是串口名称

QList<QSerialPortInfo> list3;//获取串口列表
list3=QSerialPortInfo::availablePorts();
for(int i=0;i<list3.size();i++)
	qDebug()<<list3[i].portName();//打印串口信息

选择串口,此处位选择名称为COM10的串口,并输出该串口的具体信息

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())//搜索串口,获取串口列表
      {
          if(info.portName()==


"COM10"){//在串口列表中查找
              //此处使用的是判断串口描述说明相同
              SerialPortInfo= info;//储存串口信息
              SerialPort.setPort(info);//设置串口
              break;//找到所需要的串口信息,退出循环
          }//使用if语句判断是否所需串口
      }
    if(SerialPortInfo.portName()


=="COM10"){
        qDebug() << "所需串口已找到,具体信息如下:";
        qDebug() << "Name : " << SerialPortInfo.portName();//串口名称,比如com3
        qDebug() << "Description : " << SerialPortInfo.description();//串口描述说明
        qDebug() << "Manufacturer: " << SerialPortInfo.manufacturer();
        qDebug() << "Serial Number: " << SerialPortInfo.serialNumber();//串口号
        qDebug() << "System Location: " << SerialPortInfo.systemLocation();//系统位置
    }else{
            qDebug() << "串口信息未找到,请检查设备是否连接";
    }

串口设置
设置波特率

SerialPort.setBaudRate(QSerialPort::Baud115200);//设置串口波特率(9600)
SerialPort.setDataBits(QSerialPort::Data8);//设置数据位(8)
SerialPort.setParity(QSerialPort::NoParity); //设置奇偶校检(无)
SerialPort.setStopBits(QSerialPort::OneStop);//设置停止位(一位)
SerialPort.setFlowControl(QSerialPort::NoFlowControl);//设置流控制(无)

打开串口,设置打开模式
ReadOnly,表示只读,这个模式下,只能从串口读取数据,而不能写数据

  SerialPort.open(QIODevice::ReadOnly);//打开串口,并设置串口为只读模式

判断串口是否打开,调用isOpen()函数

if(SerialPort.isOpen())
        qDebug()<<"串口已经打开";

读取数据
当串口中有数据进来时,会触发readyRead信号。此时调用读取数据的函数。

connect(&Leida_com,&QSerialPort::readyRead,[=](){
       ShuJu_Read();//读取数据的函数
    });

接收到的数据为字节类型,QSerialPort.read(7);中的7代表一次性接收7位数据

void EditTing::ShuJu_Read(){//读取数据
    QByteArray Read_Buf=QSerialPort.read(7);
    }

对数据类型进行转换便可。

  • 8
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值