串口助手的qt实现思路

要求实现如下功能: 

 获取串口号:

    foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()) {qDebug() << "Port: " << serialPortInfo.portName();  // e.g. "COM1"qDebug() << "Description: " << serialPortInfo.description();  // e.g. "USB Serial Port"qDebug() << "Manufacturer: " << serialPortInfo.manufacturer();  // e.g. "FTDI"// add combox box itemsui->comboBox->addItem(serialPortInfo.portName());}

设置串口属性:

void MainWindow::setSerialPort(QString portName, qint32 baudRate, QSerialPort::DataBits dataBits, QSerialPort::Parity parity, QSerialPort::StopBits stopBits, QSerialPort::FlowControl flowControl)
{// set serial port parametersserial.setPortName(portName);serial.setBaudRate(baudRate);serial.setDataBits(dataBits);serial.setParity(parity);serial.setStopBits(stopBits);serial.setFlowControl(flowControl);
}

,打开串口: 

    //open serial portif(serial.open(QIODevice::ReadWrite)){qDebug() << "Serial port opened";}else{// if not opened, show message boxQMessageBox::critical(this, "Error", serial.errorString());}

串口助手当中,支持以hex方法发送数据,具体解释如下:

在串口助手工具中,发送模式中的Hex模式指的是以十六进制(Hexadecimal)形式发送数据。这种模式在处理串口通信时非常有用,特别是当需要发送或接收非文本形式的二进制数据时。以下是Hex模式发送数据的几个关键点:

  1. 数据表示:在Hex模式下,发送的数据以十六进制数的形式展示,例如0x330x4A等。这些十六进制数直接对应着二进制数据中的字节值。

  2. 数据转换:当用户在串口助手中输入十六进制数时,工具会将这些数转换为对应的二进制数据,并通过串口发送出去。同样,接收到的二进制数据也会在Hex模式下以十六进制数的形式展示出来。

  3. 应用场景:Hex模式特别适用于需要精确控制发送或接收数据字节的场景,比如嵌入式系统编程、硬件调试、网络通信协议测试等。在这些场景中,二进制数据的每一位都可能有特定的含义,因此使用Hex模式可以更方便地查看和修改这些数据。

  4. 与文本模式的区别:与Hex模式相对应的是文本模式(Text Mode或ASCII Mode)。在文本模式下,发送的数据以ASCII码表中的字符形式展示,如字母、数字、标点符号等。当需要发送或接收文本信息时,文本模式更为直观和方便。然而,在处理非文本形式的二进制数据时,Hex模式则更具优势。

  5. 使用注意事项:在使用Hex模式发送数据时,需要注意数据的完整性和正确性。由于十六进制数是以两位为一组表示的(00-FF),因此在输入数据时要确保每个数都是两位的,不足两位时需要在前面补零。此外,还需要注意串口通信的波特率、数据位、停止位等参数设置,以确保数据的正确传输。

综上所述,串口助手工具中的Hex模式是一种用于以十六进制形式发送和接收二进制数据的模式,它在处理串口通信中的非文本数据时非常有用。

如果对这块感到陌生,可以同时打开二个现成的串口助手,测试一下传送格式与效果。

文本模式的发送接收,存在编码问题,要求支持UTF-8 、GBK 二种格式编码。

值得注意的是qt5、qt6 对编码的方法有变化。

这里我采取兼容qt5方式处理该问题:

1 安装兼容模块

2  pro文件中加一行说明:

greaterThan(QT_MAJOR_VERSION,5): QT += core5compat

3 使用QTextCodec 进行编码:

#include <QTextCodec>.........QByteArray MainWindow::encode(QString data, QString encode)
{// encode dataQByteArray byteArray;if (encode == "gbk") {QTextCodec *codec = QTextCodec::codecForName("gbk");byteArray = codec->fromUnicode(data);} else if (encode == "utf-8") {QTextCodec *codec = QTextCodec::codecForName("utf-8");byteArray = codec->fromUnicode(data);}return byteArray;
}

4 向串口写数据的时候,调用该方法:

    //read data from plainTextEdit  and encode data use gbkQByteArray byteArray = encode(ui->plainTextEdit->toPlainText(), "gbk");// write data to serial port  com2serial.write(byteArray);

 现在中文也能正确编码了:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428393.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GeoPandas在地理空间数据分析中的应用

GeoPandas是一个开源的Python库&#xff0c;专门用于处理和分析地理空间数据。它建立在Pandas库的基础上&#xff0c;扩展了Pandas的数据类型&#xff0c;使得用户能够在Python中方便地进行GIS操作。GeoPandas的核心数据结构是GeoDataFrame&#xff0c;它是Pandas的DataFrame的…

射击靶标检测系统源码分享

射击靶标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

VScode开发GD32移植(标准库通用),保姆级!!!!!!!

VScode开发GD32移植(标准库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 VScode开发GD32移植(标准库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#…

哪个牌子的麦克风好用?无线麦克风避坑指南:五大常见问题

随着短视频行业的兴起&#xff0c;和视频拍摄有关的外设也被推到了风口浪尖上&#xff0c;而麦克风作为视频拍摄或者现场直播使用的主要拾音工具&#xff0c;自然成为了大家非常关注的一个摄影外设工具&#xff0c;毕竟一款好的拾音工具能够给视频创作者或者直播博主带来更好的…

基于PHP的CRM管理系统源码/客户关系管理CRM系统源码/php源码/附安装教程

源码简介&#xff1a; 这是一款基于PHP开发的CRM管理系统源码&#xff0c;全称客户关系管理CRM系统源码&#xff0c;它是由php源码开发的&#xff0c;还附带了一整套详细的安装教程哦&#xff01; 功能亮点&#xff1a; 1、公海管理神器&#xff1a;不仅能搞定公海类型&…

OpenCV特征检测(6)对初步检测到的角点位置进行亚像素级别的精炼函数cornerSubPix()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 细化角点的位置。 该函数迭代以找到角点或径向鞍点的亚像素级准确位置&#xff0c;如 93中所述&#xff0c;并如下图所示。 亚像素级准确的角点…

Linux:虚拟文件系统/proc和self进程

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 /proc目录 在Linux操作系统中&#xff0c;目录/proc是一个虚拟文件系统&#xff0c;称为procfc&#xff0c;用于访问内核和系统的实时状态信息。这个文件系统不同于常规…

SpringMVC1~~~

快速入门 spring容器文件 在src下就是applicationContext-mvc.xml&#xff0c;需要在web.xml指定<init-param>&#xff0c;给DispatcherServlet指定要去操作的spring容器文件 在WEB-INF下就是xxx-servlet.xml&#xff0c;不需要在web.xml指定<init-param>,如果我们…

Qt:智能指针QScopedPointer 的使用(以及如何写一个QScopedPointer )

前言 本文讲述QScopedPointer 的使用&#xff0c;以及自己如何写一个QScopedPointer . 正文 QScopedPointer 的常用方法 以下是 QScopedPointer 的一些常用方法及其详细说明&#xff1a; 构造函数&#xff1a; QScopedPointer<T> ptr(new T);用于创建一个 QScopedPoi…

使用 Elasticsearch Reindex API 迁移数据

使用 Elasticsearch Reindex API 迁移数据 在 Elasticsearch 中&#xff0c;随着需求的变化&#xff0c;可能需要对索引进行重建或更新。这通常涉及创建新索引、迁移数据等步骤。本文介绍如何使用 Reindex API 将旧索引中的数据迁移到新索引中 一、步骤概述 创建新索引&#…

R18 NES 之SSB-less SCell operation for inter-band CA

在TR 21.918 Summary of Rel-18 Work Items 中可以看到SSB-less SCell operation for inter-band CA 是Network energy savings for NR 的一部分,其中还包括cell DTX/DRX 等等其他内容。 网络节能是 5G/NR 成功的关键,可以减少对环境的影响(温室气体排放)并节省运营成本。R…

『功能项目』伤害数字UI显示【53】

我们打开上一篇52眩晕图标显示的项目&#xff0c; 本章要做的事情是在Boss受到伤害时显示伤害数字 首先打开Boss01预制体空间在Canvas下创建一个Text文本 设置Text文本 重命名为DamageUI 设置为隐藏 编写脚本&#xff1a;PlayerCtrl.cs 运行项目 本章做了怪物受伤血量的显示UI…

详细分析Java中的ObjectMapper基本知识(附Demo)

目录 1. 基本知识2. 基本操作2.1 转换Java对象为JSON2.2 转换JSON为Java对象 3. 拓展 1. 基本知识 ObjectMapper 是 Jackson 数据处理库中的核心类之一&#xff0c;主要用于将 Java 对象转换为 JSON 和将 JSON 转换为 Java 对象 Jackson 是当前最流行的 JSON 处理库之一&…

DOCKER 数据库管理软件自己开发--———未来之窗行业应用跨平台架构

- 数据异地容灾服务--未来之窗智慧数据服务 DATA REMOTE DISASTER RECOVERY SERVICE -CyberWin Future Docker-数据查看 CyberWin DATA Viewer 1.docker 样式 mysqli://root:密码172.17.0.2:端口/数据库 阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;…

mat (Eclipse Memory Analyzer Tool)使用以及详解

前言 在Java开发中&#xff0c;内存问题往往不易被发现&#xff0c;但它们可能导致应用性能下降甚至崩溃。Eclipse Memory Analyzer Tool&#xff08;MAT&#xff09;是一个强大的开源工具&#xff0c;专门用于分析Java堆转储&#xff08;heap dumps&#xff09;文件&#xff…

2024华为杯研赛E题保姆级教程思路分析

E题题目&#xff1a;高速公路应急车道紧急启用模型 今年的E题设计到图像/视频处理&#xff0c;实际上&#xff0c;E题的难度相对来说较低&#xff0c;大家不用畏惧视频的处理&#xff0c;被这个吓到。实际上&#xff0c;这个不难&#xff0c;解决了视频的处理问题&#xff0c;…

L3 逻辑回归

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 在周将使用 LogisticRegression 函数对经典的鸢尾花 (Iris) 数据集进行分类。将详细介绍逻辑回归的数学原理。 1. 逻辑回归的数学原理 逻辑回归是一种线性分…

如何短期提高品牌声量?说几个有效策略

在如今竞争激烈的市场环境中&#xff0c;品牌声量成为了衡量一个品牌市场影响力的关键指标。一个强大的品牌声量不仅可以增加品牌的可见度&#xff0c;还能有效提升品牌的市场竞争力。但是&#xff0c;如何有效提升品牌声量&#xff0c;成为很多企业面临的挑战。首先我们要明确…

R语言机器学习算法实战系列(二) SVM算法(Support Vector Machine)

文章目录 介绍原理应用方向下载数据加载R包导入数据数据预处理数据描述数据切割标准化数据设置参数训练模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模型总结系统信息介绍 支持向量机(Support Vector Machine,简称SVM)是一种…

Django_Vue3_ElementUI_Release_004_使用nginx部署

1. nginx安装配置 1.1 下载nginx Download nginx 1.2 测试一下 1.3 进入nginx用命令操作 2. 部署 2.1 前端部署 2.1.1 修改nginx监听配置 …conf/nginx.conf http {... # 这里不进行修改server {listen 8010; # 监听 80 端口server_name 192.168.10.24; # 输入服务器 ip…