linux qt编写串口软件

news2024/11/14 17:57:32

1.界面布局

界面的简单设置,用到了

1.输入显示栏

2.数据发送栏

3.选择栏

4.16进制显示栏

和若干pushbottom label,布局就是横竖横竖这样布局下去

对界面进行基础的对齐美化

1.右侧布局的对齐

添加设置代码

右上选项已对齐

有个校验位一开始忘记添加了,添加在数据位下面就行

(教程中通过设置水平布局的拉伸比再拉长来达到对齐的效果)

2.设置显示框和发送框的拉伸比例为2比1

3.调整发送按键大小和位置

设置

宽度略比右上选项稍微短一点,拉伸时高度最大和宽度一样

左右两个宽度固定的弹簧

4.设置widget的大小和名称

为了显示更多串口消息再调整下串口选择一栏

右键布局,改为垂直布局

设置label垂直策略为fixed或者max

想适配任意波特率可以将combo box的editable打开

最后设置一下名称

最终效果

1.初始

2.拉伸



2.程序编写

1.pro添加支持

2.添加头文件

添加串口类QSerialPort和读取串口信息的类QSerialPortInfo

3.设置下拉栏选项

帮助搜索QSerialPort,下拉

可以看到几个枚举,几个重要的

波特率baudrate

数据位databits

停止位stopbits

校验位parity

双击这几个combo box添加选项,注意串口选择是不能用这个的

4.设置串口选择按钮

查看serialportinfo的说明

看返回值可以猜到这个就是读取串口列表的函数

(有时候无从下手时可以看下ui文件里是怎么写的)

在初始化下面添加初始化读取串口的代码

添加一个刷新按钮用于刷新串口列表

刷新按钮的click槽函数,清除然后重新读取(本来想设计成点击按钮就会刷新的,比较麻烦就用刷新按钮了)

5.添加串口对象和打开串口按钮

.h文件添加对象指针

初始化函数中添加

查看帮助的细节描述

也可以看到info相关的内容

使用重载过的open打开,close关闭,各种set设置参数

加载串口使用这两个中的一个

转到连接串口的按键槽函数

值得一提的是可以直接使用我们info获取的串口名称,就算输入了错误的名称那么将在open()那一步报错

下面给出按钮的clicked代码

void Widget::on_pushButton_clicked(bool checked)
{
    if(checked)
    {
        serialPort->setPortName(ui->comboBox->currentText());
        if(serialPort->open(QIODevice::ReadWrite))//以读写打开,打开错误则打印
        {
            serialPort->setBaudRate(ui->comboBox_2->currentText().toUInt());
            serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_4->currentText().toUInt()));
            serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_3->currentText().toUInt()));
            switch(ui->comboBox_5->currentIndex())//校验位为文字,所以只能使用switch对应
            {
            case 0:
                serialPort->setParity(QSerialPort::NoParity);
                break;
            case 1:
                serialPort->setParity(QSerialPort::EvenParity);
                break;
            case 2:
                serialPort->setParity(QSerialPort::OddParity);
                break;
            default:
                break;
            }

            //设置为无流控(硬件相关)
            serialPort->setFlowControl(QSerialPort::NoFlowControl);
            ui->pushButton->setText("关闭串口");
        }
        else
        {
            ui->textBrowser->append("串口连接错误\n");
            return;
        }
    }
    else
    {
        serialPort->close();
        ui->pushButton->setText("打开串口");
    }
}

记得勾选打开串口的可选项这样checked才有效果

6.添加接收数据函数

跟TCP UDP一样,串口也有个readyRead()信号

那么就可以同TCP UDP一样设计

添加槽函数

连接信号和槽

7.编写发送按钮槽函数

其他的一些简单功能不再编写了

3.交叉编译和运行

添加交叉编译器

查看编译器环境

进入项目文件夹并执行交叉编译

移动到u盘

插入usb执行

其实可以直接使用连接命令行的ttymxc0,打开串口后只是抢占掉了原来的命令界面,而且继续MobaXterm会导致你输入一个就立刻发送到开发板的接收框,不再在MobaXterm上面显示了,换一个一般的串口工具进行连接就行了

ps:可能出现接收数据不完整或者变成分段的问题,正在查找原因

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL:后端开发者的瑞士军刀

PostgreSQL:后端开发者的瑞士军刀 在后端开发的世界中,PostgreSQL不仅是一个数据库,它更像是一个多功能的瑞士军刀,为开发者提供了强大的工具来构建和维护复杂的数据系统。作为一名资深后端开发者,我想分享一些关于Po…

Nginx四层负载均衡

1、Nginx四层负载均衡 1.1 负载均衡概述 负载均衡是一种分布式计算技术,用于将网络流量和用户请求分散到多台服务器上,以此来提高网络服务的可用性和可靠性。它通过优化资源使用、最大化吞吐量以及最小化响应时间,增强了网络、服务器和数据…

资源受限的智能陷阱:集成TinyML的果蝇监控框架

这篇论文的标题是《Resource-Constrained Intelligent Trap: Fruit Flies Surveillance Framework with TinyML Integration》,作者是Quan Minh Nguyen、Minh Nhat Lai、Vu Thanh Le和Hien Bich Vo。论文介绍了一种资源受限的智能陷阱系统,用于监测和控制…

开放式耳机什么牌子好用?五款备受赞誉的单品推荐

开放式耳机设计不堵耳道,让用户听歌或打电话时还能听到周围的声音,这对喜欢户外运动的人很好。这种耳机戴着稳,舒服,也更安全。根据我自己的试戴体验,我挑出了几款不错的开放式耳机。接下来,让我们一起探讨…

【办公类-54-01】20240826每周安排文件夹制作

背景需求: 今天开始上班了,做开学前准备。我先整理电脑,然后把一些文件夹搭建好。 桌面上有一个超链接文件夹 作为通讯上报员,每周我都要保存每周的周计划安排表(包含每周五天活动内容和通讯文章) 以上学期为例 每个…

来自DeepSeek:形式化证明的RL框架

今天为大家带来来自DeepSeek(DS)的一篇内容详实且思想完备的形式化证明强化学习框架。 因篇幅有限,文中的预训练及SFT阶段不做展开,仅对文中的RLPAF的核心观点浅述: 为了在证明步骤生成中过程性引入中间策略状态,同时保持全证明生…

案例:LVS-DR模式

一、LVS-DR数据包流向分析 (1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。 (2)Director Server 和 Real…

0、LVGL PC模拟器CodeBlocks

本篇文章目录导航 ♠♠ LVGL PC模拟器 ♣♣♣♣ 一、LVGL简介 ♦♦♦♦♦♦♦♦ 1.1 配置要求(LVGL V9版本) ♣♣♣♣ 二、LVGL PC模拟器 ♦♦♦♦♦♦♦♦ 2.1 CodeBlocks安装 ♦♦♦♦♦♦♦♦ 2.2 CodeBlocks环境包下载 ♦♦♦♦♦♦♦♦ 2.3 CodeBl…

【前端基础篇】JavaScript之BOM介绍

文章目录 浏览器对象模型(BOM)介绍1. 什么是BOM?2. Window 对象2.1 弹出框2.1.1 警告框2.1.2 确认框2.1.3 提示框 2.2 定时事件2.2.1 延时器2.2.2 定时器 2.3 Window 对象其他常用属性与方法2.3.1 获取窗口尺寸2.3.2 打开新窗口与关闭窗口2.3…

企业级数据采集解决方案:三步骤搞定大数据抓取

面对浩瀚如海的互联网数据,如何才能高效、准确地完成企业级数据采集?本文将揭秘一种简化大数据抓取的三步骤策略,助力企业与开发者轻松应对数据挑战,实现数据价值最大化。 正文: 在数字化转型的浪潮中,大…

【C/C++进阶】——文件操作之文本文件与二进制文件指针读写

【文件】——操作文件 目录 一:文件的定义 二:文件名 三:文件类型 3.1:二进制文件 3.2:文本文件 四:文件的打开与关闭 4.1:文件指针 4.2:文件的打开与关闭 五:…

【Stable Diffusion】ComfyUI-插件-IPAdapter图片融合

哈喽大家好,这期来分享下如何利用IPAdapter实现两张图的融合 参考图1 参考图2 融合图 图片融合 1、工作流 将基础工作流中的【IPAdapter Unified Loader】节点换成【IPAdapter Unified Loader Community】 【IPAdapter】节点换成【IPAdapter advanced】 【IPAd…

C语言指针详解(1)

目录 一、什么是指针 1.1、定义 1.2、取地址操作符(&) 1.3、指针变量和解引用操作符(*) 二、指针变量类型的意义 三、const修饰指针 3.1、const修饰变量 3.2、const修饰指针变量 3.2.1、const放在*的左边 3.2.2、 con…

docker的安装+docker镜像的基本操作

一.docker的介绍 1、Docker 是什么? Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙 盒”机制,容器之间不会存在任何接⼝。 Docker 通过 Linux Container(容器)技术将任意…

中秋节送礼推荐,数码好物精选推荐

中秋节将至,想要为家人或朋友准备一份特别的礼物吗?不妨考虑南卡Runner Pro5骨传导耳机。这款耳机不仅在功能上表现出色,而且设计独特,非常适合作为节日赠品。 卓越的性能,完美的体验 南卡Runner Pro5凭借其卓越的性…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——7.list(模拟实现)

1.前言 1.1list与vector的不同 区别:list的迭代器底层和其他两个迭代器底层有很大区别,因为list的链式结构决定了与它们两个的不一样 相同:迭代器用法大致一样,其他成员函数的使用也大致一样。 vector与list都是STL中非常重要的序…

关于安装hbase的问题(操作系统-windows)

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

快速学习“堆“排序(C语言数据结构)

前言: 堆的实现其实并不难,难的是要用堆实现排序,也就是堆的运用。 下面需要探究一下堆的排序是怎样的。 如何利用堆进行升序或者降序的排序。 "堆排序": 原理: 例如:此时要将数组里的数组int a…

干货实用帖 | PARASOFT与JENKINS 插件集成

📖 介绍: 本篇介绍如何使用Jenkins上的插件Parasoft Findings,应用到C/Ctest项目中。 ✅ 准备工作: Jenkins项目C/Ctest 10.4以上版本及有效的许可证 视频教学: Parasoft与Jenkins插件集成 安装插件: 首先…

Vue3 获取农历(阴历)日期,并封装日历展示组件

前言:哈喽,大家好,我是码喽的自我修养!今天给大家分享vue3项目中使用 chinese-lunar-calendar 插件获取农历(阴历)日期,并封装了日历展示组件!提供了具体的代码帮助大家深入理解,彻底掌握&#…