跳转至

串口调试助手示例

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍Qt串口助手示例。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

😏1. 串口助手介绍

串口助手是一种串口通讯测试工具,它可以用于打开、关闭、配置串口,读写串口数据等常见的串口通信操作。 在嵌入式系统调试、模块测试、通讯协议分析等领域都具有广泛的应用。

串口助手通常提供GUI界面,让用户可以更加方便、直观地进行串口通讯测试和调试。用户可以通过界面上的下拉框和按钮来配置串口参数,打开/关闭串口以及发送和接收串口数据。它还支持16进制显示和发送,方便用户进行二进制数据的调试和测试。

串口助手的主要特点包括:

  1. 多平台支持:可以在Windows、Linux、macOS等多个平台上运行;

  2. 界面友好:提供一个简单、直观和易于使用的GUI界面,方便用户进行串口调试和测试;

  3. 多种串口参数设置:支持波特率、数据位、停止位、校验位、流控制等多种串口参数的设置;

  4. 16进制显示和发送:支持对串口数据进行16进制的显示和发送,方便用户进行二进制数据的调试和测试;

  5. 多种数据发送方式:支持通过文本框、文件选择器、HEX编辑器等多种方式进行数据的发送;

  6. 数据监视和记录:支持实时监视串口数据的接收情况,并可将数据保存为文件进行后续分析。

😊2. Qt串口助手示例

基于以上串口助手的特点,下面用Qt做一个简单的串口助手,实现基本功能:

pro文件:

QT       += core gui serialport

界面设计:

在这里插入图片描述

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pb_open_clicked();

    void on_pb_close_clicked();

    void serialRecv();

    void on_pb_send_clicked();

    void on_pb_clear_clicked();

private:
    Ui::MainWindow *ui;

    QSerialPort *serialPort;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setWindowTitle("串口助手示例");

    QStringList serialNamePort;
    serialPort = new QSerialPort(this);
    connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialRecv()));

    foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts()){
            serialNamePort<<info.portName();
        }
    ui->cb_index->addItems(serialNamePort);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pb_open_clicked()
{
    QSerialPort::BaudRate baudRate;
    QSerialPort::DataBits dataBits;
    QSerialPort::StopBits stopBits;
    QSerialPort::Parity checkBits;

    if(ui->cb_baudrate->currentText() == "4800"){
        baudRate = QSerialPort::Baud4800;
    }else if(ui->cb_baudrate->currentText() == "9600"){
        baudRate = QSerialPort::Baud9600;
    }else if(ui->cb_baudrate->currentText() == "115200"){
        baudRate = QSerialPort::Baud115200;
    }

    if(ui->cb_databit->currentText() == "5" ){
        dataBits = QSerialPort::Data5;
    }else if(ui->cb_databit->currentText() == "6" ){
        dataBits = QSerialPort::Data6;
    }else if(ui->cb_databit->currentText() == "7" ){
        dataBits = QSerialPort::Data7;
    }else if(ui->cb_databit->currentText() == "8" ){
        dataBits = QSerialPort::Data8;
    }

    if(ui->cb_stopbit->currentText() == "1"){
        stopBits = QSerialPort::OneStop;
    }else if(ui->cb_stopbit->currentText() == "1.5"){
        stopBits = QSerialPort::OneAndHalfStop;
    }else if(ui->cb_stopbit->currentText() == "2"){
        stopBits = QSerialPort::TwoStop;
    }

    if(ui->cb_checkbit->currentText() == "none"){
        checkBits = QSerialPort::NoParity;
    }

    serialPort->setPortName(ui->cb_index->currentText());
    serialPort->setBaudRate(baudRate);
    serialPort->setDataBits(dataBits);
    serialPort->setStopBits(stopBits);
    serialPort->setParity(checkBits);

    if(serialPort->open(QIODevice::ReadWrite) == true){
        QMessageBox::information(this,"提示","串口打开成功");
    }else{
        QMessageBox::critical(this,"提示","串口打开失败");
    }
}

void MainWindow::on_pb_close_clicked()
{
    serialPort->close();
    QMessageBox::information(this,"提示","串口关闭");
}

void MainWindow::serialRecv()
{
    QString buf;
    buf = QString(serialPort->readAll());
    ui->pte_recv->appendPlainText(buf);
    qDebug() << "串口接收中";
}

void MainWindow::on_pb_send_clicked()
{
    if (serialPort->write(ui->te_send->toPlainText().toLocal8Bit().data()) == true)
    {
        qDebug() << "send ok";
    }
    else {
        QMessageBox::critical(this,"提示","串口发送失败");
    }
}

void MainWindow::on_pb_clear_clicked()
{
    ui->te_send->clear();
}

请添加图片描述

以上。