当前位置: 首页 > news >正文

基于Qt的串口调试工具

1.项目地址

https://github.com/zhangjiechina001/SerialPortTool

2.核心类

头文件

#ifndef SERIALPORTWRAP_H
#define SERIALPORTWRAP_H
#pragma execution_character_set("utf-8")
#include <QObject>
#include <QSerialPort>class SerialPortWrap : public QObject
{Q_OBJECT
public:static QMap<QString,QSerialPort::Parity> getParityMap();static QMap<QString,QSerialPort::DataBits> getDataMap();static QMap<QString,QSerialPort::StopBits> getStopMap();static QMap<QString, QSerialPort::FlowControl> getFlowMap();public:explicit SerialPortWrap(QObject *parent = nullptr);void setSerialPort(QSerialPort *port);bool sendNoReply(QByteArray data);bool sendReply(QByteArray data, QByteArray &rec);signals:void receivedData(QByteArray data);public slots:private:QSerialPort *_serial=nullptr;QList<QByteArray> _recList;void waitMs(int ms);private slots:void onError(QSerialPort::SerialPortError err);void onReadyReady();
};#endif // SERIALPORTWRAP_H

cpp

#include <QMap>
#include <QDebug>
#include <QEventLoop>
#include <QElapsedTimer>
#include <QTimer>
#include "serialportwrap.h"QMap<QString, QSerialPort::Parity> SerialPortWrap::getParityMap()
{QMap<QString,QSerialPort::Parity> parityMap={{"NoPraity",QSerialPort::NoParity},{"EvenParity",QSerialPort::EvenParity},{"OddParity",QSerialPort::OddParity},{"SpaceParity",QSerialPort::SpaceParity},{"MarkParity",QSerialPort::MarkParity}};return parityMap;
}QMap<QString, QSerialPort::DataBits> SerialPortWrap::getDataMap()
{QMap<QString,QSerialPort::DataBits> dataMap={{"Data5",QSerialPort::Data5},{"Data6",QSerialPort::Data6},{"Data7",QSerialPort::Data7},{"Data8",QSerialPort::Data8}};return dataMap;
}QMap<QString, QSerialPort::StopBits> SerialPortWrap::getStopMap()
{QMap<QString,QSerialPort::StopBits> stopMap={{"OneStop",QSerialPort::OneStop},{"OneAndHalfStop",QSerialPort::OneAndHalfStop},{"TwoStop",QSerialPort::TwoStop}};return stopMap;
}QMap<QString, QSerialPort::FlowControl> SerialPortWrap::getFlowMap()
{QMap<QString,QSerialPort::FlowControl> flowMap={{"NoFlowControl",QSerialPort::NoFlowControl},{"HardwareControl",QSerialPort::HardwareControl},{"SoftwareControl",QSerialPort::SoftwareControl},{"UnknownFlowControl",QSerialPort::UnknownFlowControl}};return flowMap;
}SerialPortWrap::SerialPortWrap(QObject *parent) : QObject(parent)
{}void SerialPortWrap::setSerialPort(QSerialPort *port)
{_serial=port;connect(_serial,&QSerialPort::errorOccurred,this,&SerialPortWrap::onError);connect(_serial,&QSerialPort::readyRead,this,&SerialPortWrap::onReadyReady);
}bool SerialPortWrap::sendNoReply(QByteArray data)
{_recList.clear();return  _serial->write(data)!=-1;
}bool SerialPortWrap::sendReply(QByteArray data,QByteArray &rec)
{_recList.clear();_serial->write(data);QElapsedTimer ela;ela.start();while(_recList.count()==0){waitMs(100);if(ela.elapsed()>3000){throw QString("%1 time out").arg(_serial->portName());}}waitMs(50);QByteArray arr;for(int i=0;i<_recList.count();i++){arr.append(_recList.at(i));}rec=arr;return true;
}void SerialPortWrap::waitMs(int ms)
{QEventLoop loop;QTimer::singleShot(ms, &loop, &QEventLoop::quit);  // 设置定时器,在超时时退出事件循环loop.exec();  // 进入事件循环
}void SerialPortWrap::onError(QSerialPort::SerialPortError err)
{qDebug()<<__FUNCTION__<<__LINE__<<_serial->portName()<<_serial->errorString();
}void SerialPortWrap::onReadyReady()
{QByteArray arr=_serial->readAll();_recList.append(arr);emit receivedData(arr);
}

3.效果图:

在这里插入图片描述


http://www.mrgr.cn/news/26476.html

相关文章:

  • 金钥匙系列:解决学习拖延症和提高学习效率的有效方法
  • 在服务器上开Juypter Lab教程(远程访问)
  • 企业异地投资、跨省投资、异地子公司数据(2000-2022年)
  • 伏秒平衡的深入理解
  • Java 17 LTS-封闭类和封闭接口(Sealed Classes and Interfaces)
  • shell脚本语法
  • 华为OD机试 - 机器人仓库搬砖 - 二分查找(Java 2024 E卷 100分)
  • 关于Redis缓存一致性问题的优化和实践
  • 2020-10-26 c语言,一串用空格隔开的数字求和。
  • Java 21的Collections Framework的笔记
  • 3D点云目标检测数据集标注工具 保姆级教程——CVAT (附json转kitti代码)
  • 探索使用 CockroachDB、Redpanda 和 Kafka Connect 将数据实时摄取到 Snowflake 中
  • 气膜体育馆:为学校打造智能化运动空间—轻空间
  • idea中java及java web项目的常见问题
  • CentOS 7官方源停服,配置本机光盘yum源
  • 3D GS 测试自己的数据
  • 系统架构设计师 - 项目管理
  • 华为OD机试 - 机器人仓库搬砖 - 二分查找(Python/JS/C/C++ 2024 D卷 100分)
  • 【数据结构】线段树复杂应用
  • Vue3实践-项目构造原理1