qt-5串口与通讯

 

       串口发送数据与下位机stm32进行通讯。


一、串口通讯

主要参数有:波特率、校验位、数据位、停止位、控制流

主要操作有:串口的打开和关闭、刷新设备串口、接发数据、开关显示灯等。

二、实现串口通讯

1.在头文件中引入 QtSerialPort 类的两个头文件(必须引入)

// 引入串口通信的两个头文件(第一步)
#include <QtSerialPort/QSerialPort>         // 提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo>     // 提供系统中存在的串口信息

2.在工程文件中添加以下代码

# 引入串口工程类型(第二步)pro文件添加
QT       += serialport

3.在头文件中定义全局的串口对象

QSerialPort *serialPort;

4.相关配置

QStringList serialNamePort;
    serialPort = new QSerialPort(this);//新建一个对象去获取串口数据

    connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyBead_Slot()));//发送串口数据关联


    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){
        serialNamePort<<info.portName();//获取串口的串口号
    }
    ui->serialBox->addItems(serialNamePort);//下拉列表框QComboBox

5.通过一个按键按键实现串口的开和关

我的ui设计界面如下

b9e43bc64a29403e81f75873182bf78c.png

 1、关联打开串口按钮的点击事件

2、在按键中实现:

void Widget::on_openBt_clicked()//打开和关闭串口
{
    open_flag=!open_flag;//判断串口是否打开的标志位
    if(open_flag==0)//已经打开--则关闭
    {
        serialPort->clear();
        serialPort->close();
        ui->openBt->setText("打开串口");
        QMessageBox::information(this,"提示","串口关闭成功   ");
    }
    if(open_flag==1)//未打开---需要打开
    {
        QSerialPort::BaudRate baudBite;//波特率
        QSerialPort::DataBits dataBite;//数据位
        QSerialPort::StopBits stopBite;//停止位
        QSerialPort::Parity checkBite;//校验位
        baudBite = QSerialPort::Baud115200;
        dataBite = QSerialPort::Data8;
        stopBite = QSerialPort::OneStop;
        checkBite = QSerialPort::NoParity;
        serialPort->setPortName(ui->serialBox->currentText());//设置串口配置
        serialPort->setBaudRate(baudBite);
        serialPort->setDataBits(dataBite);
        serialPort->setStopBits(stopBite);
        serialPort->setParity(checkBite);
        if(serialPort->open(QIODevice::ReadWrite) == true){
        ui->openBt->setText("关闭串口");
            QMessageBox::information(this,"提示","串口打开成功   ");//提示框提示
        }
        else {
            QMessageBox::critical(this,"提示","串口打开失败   ");
        }
    }
}

 3、刷新串口

如果在打开软件后才插上串口设备的话,下拉列表不会显示,需要重新搜索串口

点击刷新串口按钮,刷新串口号,并显示出来

void Widget::on_refreshBt_clicked()//刷新串口号
{
     qDebug() << "刷新串口";
     ui->serialBox->clear();
     /* 读取可以使用的串口*/
     this->avaiPortsList = QSerialPortInfo::availablePorts();
     /* 提取串口个数*/
     int avaiPortNum = avaiPortsList.length();
     /*逐个显示*/
     for(int i = 0; i < avaiPortNum; i++)
     {
         ui->serialBox->addItem(this->avaiPortsList[i].portName());//下拉框显示

     }
}

6.串口发送数据

直接发送字符串:

serialPort->write("R1");

 将输入框内容发送:

QString data = QString("W:%1:0").arg(ui->t5cardEdit->text());
QByteArray dataArray = data.toUtf8(); // 将字符串转换成字节数组
serialPort->write(dataArray); // 发送数据到串口

7.串口接收数据

串口接收数据需要关联相关的槽函数

connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyBead_Slot()));//接收串口数据关联

 串口接收槽函数

void Widget::serialPortReadyBead_Slot()//分割数据得到串口的数据
{
     QString buf;
     buf = QString(serialPort->readAll());//buf就是接收到的数据
}

 

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了qt-5串口通讯的使用。

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值