😏1. 串口助手介绍
串口助手是一种串口通讯测试工具,它可以用于打开、关闭、配置串口,读写串口数据等常见的串口通信操作。 在嵌入式系统调试、模块测试、通讯协议分析等领域都具有广泛的应用。
串口助手通常提供GUI界面,让用户可以更加方便、直观地进行串口通讯测试和调试。用户可以通过界面上的下拉框和按钮来配置串口参数,打开/关闭串口以及发送和接收串口数据。它还支持16进制显示和发送,方便用户进行二进制数据的调试和测试。
串口助手的主要特点包括:
基于以上串口助手的特点,下面用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();
}