串口助手的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 items
        ui->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 parameters
    serial.setPortName(portName);
    serial.setBaudRate(baudRate);
    serial.setDataBits(dataBits);
    serial.setParity(parity);
    serial.setStopBits(stopBits);
    serial.setFlowControl(flowControl);
}

,打开串口: 

    //open serial port
    if(serial.open(QIODevice::ReadWrite)){
        qDebug() << "Serial port opened";}
    else{
        // if not opened, show message box
        QMessageBox::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 data
    QByteArray 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 gbk
    QByteArray byteArray = encode(ui->plainTextEdit->toPlainText(), "gbk");
    // write data to serial port  com2
    serial.write(byteArray);

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年中国研究生数学建模竞赛C题——解题思路

2024年中国研究生数学建模竞赛C题——解题思路 数据驱动下磁性元件的磁芯损耗建模——解决思路 二、问题描述 为解决磁性元件磁芯材料损耗精确计算问题&#xff0c;通过实测磁性元件在给定工况&#xff08;不同温度、频率、磁通密度&#xff09;下磁芯材料损耗的数据&#xf…

【HTTPS】中间人攻击和证书的验证

中间人攻击 服务器可以创建出一堆公钥和私钥&#xff0c;黑客也可以按照同样的方式&#xff0c;创建一对公钥和私钥&#xff0c;冒充自己是服务器&#xff08;搅屎棍&#xff09; 黑客自己也能生成一对公钥和私钥。生成公钥和私钥的算法是开放的&#xff0c;服务器能生产&…

「iOS」——单例模式

iOS学习 前言单例模式的概念单例模式的优缺点单例模式的两种模式懒汉模式饿汉模式单例模式的写法 总结 前言 在一开始学习OC的时候&#xff0c;我们初步接触过单例模式。在学习定时器与视图移动的控件中&#xff0c;我们初步意识到单例模式的重要性。对于我们需要保持的控件&a…

java基础知识20 Intern方法的作用

一 Intern方法作用 1.1 Intern方法 1.在jdk1.6中&#xff1a; intern()方法&#xff1a;在jdk1.6中&#xff0c;根据字符串对象&#xff0c;检查常量池中是否存在相同字符串对象 如果字符串常量池里面已经包含了等于字符串X的字符串&#xff0c;那么就返回常量池中这个字符…

windows安装docker 本地打包代码

参考文章1&#xff1a;https://gitcode.csdn.net/65ea814b1a836825ed792f4a.html 参考文章2&#xff1a; Windows 安装docker&#xff08;详细图解&#xff09;-CSDN博客 一 下载 Docker Desktop 在官网上下载 Docker Desktop&#xff0c;可以从以下链接下载最新版本&#x…

【大模型实战篇】关于Bert的一些实操回顾以及clip-as-service的介绍

最近在整理之前的一些实践工作&#xff0c;一方面是为了笔记记录&#xff0c;另一方面也是自己做一些温故知新&#xff0c;或许对于理解一些现在大模型工作也有助益。 1. 基于bert模型实现中文语句的embedding编码 首先是基于bert模型实现中文语句的embedding编码&#xff0c;…

鸿蒙【项目打包】- .hap 和 .app;(测试如何安装发的hap包)(应用上架流程)

#打包成.hap需要用到真机 原因是&#xff1a;只有用上了真机才能在项目中配置 自动签名 #步骤: ##第一步:选择真机->选择项目结构->点Sigining Configs(签名配置) ##第二步:勾选Automatically generate signature(自动签名)->点击ok ##第三步:点击构建->点击 …

接口幂等性和并发安全的区别?

目录标题 幂等性并发安全总结 接口幂等性和并发安全是两个不同的概念&#xff0c;虽然它们在设计API时都很重要&#xff0c;但侧重点不同。 幂等性 定义&#xff1a;幂等性指的是无论对接口进行多少次相同的操作&#xff0c;结果都是一致的。例如&#xff0c;HTTP的PUT和DELE…

QT快速安装使用指南

在Ubuntu 16.04上安装Qt可以通过多种方式进行。以下是使用Qt在线安装程序和apt包管理器的两种常见方法&#xff1a; 方法一&#xff1a;使用Qt在线安装程序 下载Qt在线安装程序 访问Qt官方网站&#xff1a;Try Qt | Develop Applications and Embedded Systems | Qt找到并下载…

Hadoop的安装

文章目录 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。二. 环境变量三. 配置 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。 随后点击下载即可 由于Hadoop不直接支持Windows系统&#xff0c;因此&#xff0c;需要修改一些配置才能运行 二. 环境变量 三. 配置 进…

arcgisPro地理配准

1、添加图像 2、在【影像】选项卡中&#xff0c;点击【地理配准】 3、 点击添加控制点 4、选择影像左上角格点&#xff0c;然后右击填入目标点的投影坐标 5、依次输入四个格角点的坐标 6、点击【变换】按钮&#xff0c;选择【一阶多项式&#xff08;仿射&#xff09;】变换 7…

VisualPromptGFSS

COCO-20 i ^i i太大&#xff0c;不建议复现

大学生必看!60万人在用的GPT4o大学数学智能体有多牛

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1…

14年数据结构

第一题 解析&#xff1a; 求时间复杂度就是看程序执行了多少次。 假设最外层执行了k次&#xff0c;我们看终止条件是kn&#xff0c;则&#xff1a; 有, 内层是一个j1到jn的循环&#xff0c;显然执行了n次。 总的时间复杂度是内层外层 答案选C。 第二题 解析&#xff1a; 一步一…

基于协同过滤+python+django+vue的音乐推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

【前端】ES6:Class语法和Class继承

文章目录 1 Class语法1.1 类的写法1.2 getter与setter1.3 静态属性和静态方法 2 Class继承 1 Class语法 1.1 类的写法 class Person {constructor(name,age){this.name name;this.age age;}say(){console.log(this.name,this.age)} } let obj new Person("kerwin&quo…

双击热备 Electron网页客户端

安装流程&#xff1a; 1.下载node.js安装包进行安装 2.点击Next; 3.勾选&#xff0c;点击Next; 4.选择安装目录 5.选择Online 模式 6.下一步执行安装 。 7.运行cmd,执行命令 path 和 node --version&#xff0c;查看配置路径和版本 8.Goland安装插件node.js 9.配置运行…

【C#】内存的使用和释放

在 C# 中&#xff0c;内存管理主要是由 .NET 的垃圾回收器&#xff08;Garbage Collector, GC&#xff09;自动处理的。然而&#xff0c;了解如何正确地使用和释放内存对于编写高效且可靠的代码非常重要。以下是一些关键点和最佳实践&#xff1a; 1. 内存分配 托管资源&#x…

【我的 PWN 学习手札】House Of Karui —— tcache key 绕过手法

目录 前言 一、House of Karui 二、测试与模板 前言 早期版本的 tcachebin 由于毫无保护&#xff0c;导致攻击利用非常容易&#xff0c;成为重灾区。tcache dup&#xff0c;也即 tcachebin 中的 double free 利用手法&#xff0c;是攻击者常常选用的攻击方式。然而&#xf…

计算机网络(八) —— Udp协议

目录 一&#xff0c;再谈端口号 1.1 端口号 1.2 netsta命令 二&#xff0c;UDP协议 2.1 关于UDP 2.2 Udp协议格式 2.3 Udp协议特点 2.4 Udp的缓冲区 一&#xff0c;再谈端口号 http协议本质是“请求 - 响应”形式的协议&#xff0c;但是应用层需要先将数据交给传输层&…