前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】Qt:串口调试助手示例

【C++】Qt:串口调试助手示例

作者头像
DevFrank
发布2024-07-24 14:28:57
1270
发布2024-07-24 14:28:57
举报
文章被收录于专栏:C++开发学习交流

😏1. 串口助手介绍

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

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

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

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

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

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

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

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

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

😊2. Qt串口助手示例

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

pro文件:

代码语言:javascript
复制
QT       += core gui serialport

界面设计:

在这里插入图片描述
在这里插入图片描述

mainwindow.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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();
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 😊2. Qt串口助手示例
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档