QSerialPort实现上位机和单片机串口通信模块

2023-05-16

一、背景知识

项目需要,上位机控制单片机执行任务,单片机会发送心跳包和任务指令到上位机,因此采用全双工模式,使用Qt自带QSerialPort实现。

二、设计思路

模块需发送和接收数据,为不影响UI线程,将通信模块的发送和数据接收实现在次线程,数据解析另起线程,处理数据后将处理结果发送到UI线程。

UI线程发送指令信号,次线程槽函数中将指令转变为通信协议数据,放置于发送数据队列,利用该线程中的定时器定时发送;QSeriealPort接收数据的槽函数负责接收数据,并在其实现内将接收到的数据进行解析。因此设计DeviceManager,DeviceControl,DeviceDataRecete三个类。其类关系图如下所示:

三、调试运行

UI线程通过DeviceManager发送任务命令信号,DeviceControl在次线程中执行命令转换为通信协议数据,通过定时进行发送,同时接收串口数据,并在DeviceControl的接收槽函数的读取并推入DeviceDataRecete的数据队列,DeviceDataRecete对数据进行解析,并将结果通过DeviceControl发送到DeviceManager所在的UI线程。

四、结果分析

测试显示可正常运行,该模式适合实时通信,在效率方面可以,DeviceDataRecete线程可以使用条件变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QSerialPort实现上位机和单片机串口通信模块 的相关文章

随机推荐

  • 插头类型:MX 1.25 PH间距2.0、XH间距2.5/2.54、VH间距3.96区别?

    PH xff0c XH xff0c ZH等这些都是JST xff08 Japan Standard Time 日本压着端子制造株式会社 xff09 的料号 xff0c 因为JST用的最多 xff0c 且很多工厂都在模仿制作 xff0c 故也
  • 树莓派NAS搭建——基于OMV

    之前树莓派的debian版系统里装了个以samba服务为基础的NAS xff0c 但在实际使用中发现写入速度只有2M s xff0c 特别慢 xff0c 用的是Class 10的高速TF卡也于事无补 实在无法直视 xff0c 于是一直在搜寻
  • 最短路径算法——Dijkstra介绍

    个人心得体会 xff1a 理解这种或这类算法 xff0c 可以先从小规模的问题入手 xff0c 并逐渐推广到问题变复杂的情况 xff0c 这样理解起来也可以更方便和透彻 和数学归纳法很相似 图简介 以使用地图APP为例 xff0c 假设你想
  • net framework4.0未能成功安装、另一个安装操作正在进行、请继续这个操作之前完成那个操作。

    转自百度 安装net framework 4 0出错的解决方法 步骤 xff1a 开始 运行 xff08 输入CMD xff09 确定或者回车 xff0c 打开管理员命令窗口 xff1b 在管理员命令窗口输入 xff1a net stop
  • java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

    第一次写jsp xff0c 用jdbc连接数据库进行查询的时候 xff0c Class forName 34 com microsoft jdbc sqlserver SQLServerDriver 34 newInstance conn
  • numpy Array [: ,] 的取值方法

    numpy Array 的取值方法 NumPy数组是一个多维数组对象 xff0c 称为ndarray 创建一个numpy数组 如下所示 span class token keyword import span numpy span clas
  • 如何安装windows和linux双系统

    最近装了两天系统积攒了一下经验 原本一直使用win7 xff0c 现需要使用linux操作系统作为开发环境 xff0c 虚拟机的能力总是有限 xff0c 所以打算装双系统 xff0c 装系统以前一直对我来说一直很神秘 xff0c 为什么系统
  • sed -i命令详解

    sed i命令详解 root 64 www sed nefr 动作 选项与参数 xff1a n xff1a 使用安静 silent 模式 在一般 sed 的用法中 xff0c 所有来自 STDIN 的数据一般都会被列出到终端上 但如果加上
  • 模拟信号和数字信号的区别

    作者 xff1a 杨眀 链接 xff1a https www zhihu com question 38377832 answer 118464689 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业
  • 于渊《orange's 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常

    于渊先生的 orange s 一个操作系统实现 的字符串输出函数disp str有bug会导致异常 发现在同一个函数中两次使用disp str就会导致异常 xff0c 这个问题困扰了我很久 xff0c 一般来说都是堆栈的没有恢复好的问题 x
  • 基于CMake导入第三方库,以OpenCV为例

    基于CMake导入第三方库 xff0c 以OpenCV为例 目录 基于CMake导入第三方库 xff0c 以OpenCV为例前言直接导入find package基于nuget进行包管理运行的问题 前言 除了自己写一个静态库或动态库 xff0
  • 进程是如何结束与回收的

    大致描述进程创建的过程 xff0c 系统中有一个叫做init的初始进程 xff0c 由它调用fork产生子进程 完全拷贝父进程的一切堆栈 xff0c 代码 xff0c 数据 xff0c 文件资源等 xff0c 子进程使用exec装载磁盘中的
  • 今天安装spring的时候遇到一些缺少repository的问题

    在安装spring的时候会对其依赖的一些库的进行一些链接检查 xff0c 导致会报一些缺少repository的问题 No repository found containing osgi bundle oracle eclipse too
  • 什么是maven

    maven是一种项目管理工具 xff0c maven项目与普通项目的不同是 xff0c 项目中多了一个pom xml的文件 xff0c 用于告诉当前项目所需要的jar的位置 xff0c 从而无须手动将需要用到的jar包引入
  • 串口实用的循环缓冲区

    小记 项目临时需要单片机进行节点控制 xff0c 主要用来控制模块的开关 xff0c 以串口进行通讯 单片机几多久没玩了 xff0c 选用的是C8051F920 xff0c 传说中增强型51 xff0c 不过看了Datesheet 还是51
  • C++学习:编译

    编译 为了编译 C 43 43 程序 xff0c 我们使用 C 43 43 编译器 C 43 43 编译器按顺序遍历程序中的每个源代码 cpp 文件 它会检查您的代码以确保它遵循 C 43 43 语言的规则 如果没有 xff0c 编译器会给
  • 堆、栈、方法区存储的变量的类型

    1 堆 xff08 Heap xff09 xff0c 此内存区域的唯一目的就是存放对象实例 xff0c 几乎所有的对象实例都在这里分配内存 这一点在 Java 虚拟机规范中的描述是 xff1a 所有的对象实例以及数组都要在堆上分配 2 通常
  • stm32串口中断的接收

    利用串口使得led点亮 利用之前的串口函数加上NVIC的中断函数结构体 定义结构体 定义 配置抢占优先级的组别 配置NVIC串口中断的结构体 xff1a 中断的通道 xff0c 配置抢占优先级和子优先级 使能CMD 结构体初始化 还有需要配
  • 4.1.2.HTTP报文格式解析

    不同的请求方式 xff0c 他们的请求格式可能是不一样的 xff0c 请求格式就是我们所说的的报文格式 但是 xff0c 通常来说一个HTTP请求报文由请求行 xff08 request line xff09 请求头 xff08 heade
  • QSerialPort实现上位机和单片机串口通信模块

    一 背景知识 项目需要 xff0c 上位机控制单片机执行任务 xff0c 单片机会发送心跳包和任务指令到上位机 xff0c 因此采用全双工模式 xff0c 使用Qt自带QSerialPort实现 二 设计思路 模块需发送和接收数据 xff0