串口助手的qt实现思路

news/2024/9/22 13:25:25/

要求实现如下功能: 

 获取串口号:

    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.ppmy.cn/news/1528831.html

相关文章

本地生活商城开发搭建 同城O2O线上线下推广

同城本地化商城目前如火如荼&#xff0c;不少朋友咨询本地生活同城平台怎么开发&#xff0c;今天商淘云与大家分享同城O2O线上商城的设计和开发。 本地生活商城一般会涉及到区域以及频道类&#xff0c;一般下单需要支持用户定位、商家定位&#xff0c;这样利于用户可以快速找到…

(PySpark)RDD实验实战——取最大数出现的次数

实验环境&#xff1a; 提前准备好findspark&#xff0c;pyspark&#xff0c;py4j等库import findspark from pyspark import SparkContext, SparkConffindspark.init() #初始化spark&#xff0c;默认为你所设定的环境变量 conf SparkConf().setAppName("jsytest")…

Spring Boot 入门:解锁 Spring 全家桶

前言 Spring 全家桶是现代 Java 开发者不可或缺的工具集&#xff0c;它提供了从轻量级的框架到微服务架构的完整支持。本文将带你快速了解 Spring 框架、核心概念如 IoC&#xff08;控制反转&#xff09;和 AOP&#xff08;面向切面编程&#xff09;&#xff0c;并深入介绍 Sp…

啦啦啦啦啦

cat >> /etc/hosts << EOF 192.168.58.140 ceph-admin 192.168.58.141 ceph-1 192.168.58.142 ceph-2 192.168.58.143 ceph-3 192.168.58.144 ceph-client EOF

在Spring Boot中使用Logback进行日志管理

在Spring Boot中使用Logback进行日志管理 以项目www.studytool.site为例 Logback 是一个高效、灵活且支持多种输出方式的日志框架&#xff0c;广泛应用于Java项目中&#xff0c;特别是Spring Boot项目。本文将介绍如何在Spring Boot项目中配置和使用Logback&#xff0c;重点介绍…

算法打卡:第十一章 图论part03

今日收获&#xff1a;孤岛的总面积&#xff0c;沉没孤岛&#xff0c;水流问题&#xff0c;建造最大岛屿 1. 孤岛的总面积 题目链接&#xff1a;101. 孤岛的总面积 思路&#xff1a;只要岛屿中有一个节点是边缘节点&#xff0c;那么这个岛屿就不是孤岛&#xff0c;结果不累加…

《关键跃升》读书笔记10

发展靠规划 执⾏靠闭环&#xff0c;提⾼靠循环&#xff0c;其实讲的是短期和中期的事。短期内完成 任务靠闭环&#xff0c;经理有⽆数需要执⾏的事在⼿边&#xff0c;要靠闭环&#xff0c;不能有漏 洞&#xff0c;不能出现不了了之的情况&#xff1b;中期的团队成⻓靠循环&…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器&#xff0c;属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格&#xff0c;生成各种各样类似效果的图片&#xff0c;就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片&#xff1a; 不输入任何提示词&#xff0c;出图…