Qt实现串口调式助手

参考:【QT】串口调试助手icon-default.png?t=N7T8https://blog.csdn.net/hanhui22/article/details/111594742?spm=1001.2014.3001.5506

一、成品展示

1.1 串口功能描述

检测当前可用的通讯端口,如COM1、COM2、COM3、COM4等

配置端口号、波特率、数据位、校验位、停止位参数

串口当前状态,连接(打开)还是未连接(关闭)

发送默认是ASCII格式发送,可配置HEX 16进制格式,还有自动发送功能

接收默认是ASCII格式发送,可配置HEX 16进制格式,还有自动换行、显示接收时间功能

具有打开端口open、停止端口close、清空接收clear等功能

 1.2 串口接收数据显示图

 1.3 串口发送数据显示图

输入 ifconfig 命令查看IP地址等信息界面

二、编程实现功能 

1、在.pro文件中添加如下内容:

QT       += serialport

2、在.h文件中添加串口所用的头文件

#include <QSerialPort>
#include <QSerialPortInfo>

3、添加一个QSerialPort* serialPort的类成员,并在.cpp中实例化对象:

serialPort = new QSerialPort;

4、扫描可用串口

//搜索当前可用串口,并保存在QList中
QList<QSerialPortInfo> list = QSerialPortInfo::availablePorts();
//遍历list加入下拉列表,并打印串口信息
foreach(const QSerialPortInfo &info,list){
    ui->serialComboBox->addItem(info.portName());
    qDebug() << "name:" << info.portName();//串口名称
    qDebug() << "info:" << info.description();//串口描述信息
}

5、初始化串口(设置串口参数)

init_serialPort(QSerialPort *serialPort,QString name, QString baud,int dataBit,QString verifyBit,QString stopBit)
{
    //设置串口名称
    serialPort->setPortName(name);
    //配置波特率
    if(baud == "1200"){
        serialPort->setBaudRate(QSerialPort::Baud1200);
    }else if(baud == "2400"){
        serialPort->setBaudRate(QSerialPort::Baud2400);
    }else if(baud == "4800"){
        serialPort->setBaudRate(QSerialPort::Baud4800);
    }else if(baud == "9600"){
        serialPort->setBaudRate(QSerialPort::Baud9600);
    }else if(baud == "19200"){
        serialPort->setBaudRate(QSerialPort::Baud19200);
    }else if(baud == "38400"){
        serialPort->setBaudRate(QSerialPort::Baud38400);
    }else if(baud == "57600"){
        serialPort->setBaudRate(QSerialPort::Baud57600);
    }else if(baud == "115200"){
        serialPort->setBaudRate(QSerialPort::Baud115200);
    }
    //配置数据位
    switch (dataBit) {
    case 5:
        serialPort->setDataBits(QSerialPort::Data5);
        break;
    case 6:
        serialPort->setDataBits(QSerialPort::Data6);
        break;
    case 7:
        serialPort->setDataBits(QSerialPort::Data7);
        break;
    case 8:
        serialPort->setDataBits(QSerialPort::Data8);
        break;
    }
    //配置校验位
    if(verifyBit == "无"){
        serialPort->setParity(QSerialPort::NoParity);
    }else if(verifyBit == "奇校验"){
        serialPort->setParity(QSerialPort::OddParity);
    }else if(verifyBit == "偶校验"){
        serialPort->setParity(QSerialPort::EvenParity);
    }
    //配置停止位
    if(stopBit == "1"){
        serialPort->setStopBits(QSerialPort::OneStop);
    }else if(stopBit == "2"){
        serialPort->setStopBits(QSerialPort::TwoStop);
    }
}

6、打开串口

QString name = ui->portComboBox->currentText();
QString baud = ui->baudComboBox->currentText();
int dataBit = ui->dataComboBox->currentText().toInt();
QString verifyBit = ui->verifyComboBox->currentText();
QString stopBit = ui->stopComboBox->currentText();
//初始化send串口
init_serialPort(sendSerialPort,name,baud,dataBit,verifyBit,stopBit);
//打开串口
bool state = serialPort->open(QIODevice::ReadWrite);
if(state){
    qDebug() << "串口开启成功";
}else{
    qDebug() << "串口开启失败";
}

7、发送消息

serialPort->write(ui->sendEdit->toPlainText().toUtf8());//先将QTextEdit类型转为QString,再转为QByteArray

8、接收消息

//接受串口消息
connect(serialPort,&QSerialPort::readyRead,this,[&](){
    QByteArray data = serialPort->readAll();
    ui->recvEdit->insertPlainText(data);
});

9、关闭串口

serialPort->close();
qDebug() << "串口已关闭";

10、刷新串口 

刷新串口的功能是重新扫描当前可用串口,然后将当前可用串口号显示到串口的下拉框中。扫描方法上面已经介绍过了,需要注意的是,点击刷新串口,扫描完当前可用串口后,需要将之前串口下拉框中的显示内容清除掉再重新显示。可以加个定时器刷新串口。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值