QT上位机的学习

embedded/2024/9/23 11:21:15/

 后面又该找工作了,这块的内容也需要好好学习

QT 篇 QT上位机串口编程-CSDN博客

(1)可以通过安装虚拟串口来模拟串口通信的情况

发现我之前安装过(9.0):

可以生成虚拟串口,无需实际硬件串口就可以实现同一台电脑上串口模拟通信。

(但好像用不了,还是用人家的吧)(7.2)

如何进行虚拟串口测试呢?

串口模拟工具实现测试-CSDN博客

安装了这个软件:

好像是可以了,但我不是很理解。

什么是串口通信呢?

波特率是什么?

数据位,校验位,停止位。

串口通信详解-CSDN博客

串行通信: 

同一时刻,只能传输一个bit位的信号,只需要一根信号线。

异步串行通信:发送方和接收方,使用各自的时钟控制数据发送和数据接收。

(为使双方收发协调,要求双方时钟尽可能一致)

串口通信通常是:异步串行通信总线(两条数据线)(全双工)

串口发送一串数据不是连续发送,而是一个字节一个字节发送的。

这是为了防止接收和发送的累计误差。

编程:

QT       +=serialport

#include <QSerialPort> //访问串口的库

#include <QSerialPortInfo> //查询串口信息的库

 QSerialPort *serialport;serialport = new QSerialPort(this);
    QList<QSerialPortInfo> ports=QSerialPortInfo::availablePorts();for(int i=0;i<ports.count();i++){QSerialPortInfo info=ports.at(i);qDebug()<<"串口"<<i+1<<":"<<info.portName();}

设置串口名称 

serialport->setPortName(name);
if (!serialport->open(QIODevice::ReadWrite)){qDebug()<<"错误,串口无法打开,可能被占用!";QMessageBox::about(this,"错误","串口无法打开,可能被占用!");serialport->close();return ;}

设置波特率(通常是115200) 

 serialport->setBaudRate(baudRate);

设置停止位(高电平)

serialport->setStopBits(QSerialPort::OneStop);
serialport->setStopBits(QSerialPort::TwoStop);

Unknown number of stop bits. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.

未知的停止位数。该值被淘汰了。它被提供来维持旧代码工作。强烈建议新代码中别用它了。

设置数据位 

serialport->setDataBits(QSerialPort::Data5);

设置奇偶位(校验位)

serialport->setParity(QSerialPort::NoParity);
serialport->setParity(QSerialPort::OddParity);
serialport->setParity(QSerialPort::EvenParity); 

数据流量控制(不控制)

serialport->setFlowControl(QSerialPort::NoFlowControl) ;

硬件控制,软件控制 

接收数据

    connect(serialport,SIGNAL(readyRead()),this,SLOT(serialPortReadyRead()));
void MainWindow::serialPortReadyRead()
{QByteArray temp = serialport->readAll();  
}

发送数据

QByteArray buff;
//写入数据
serialport->write(buff);

示例:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSerialPort>			//访问串口的库
#include <QSerialPortInfo>		//查询串口信息的库
#include <QDebug>				//用于调试打印输出的库
namespace Ui {
class widget;
}class widget : public QWidget
{Q_OBJECTpublic:explicit widget(QWidget *parent = 0);~widget();
public slots:void serialPortReadyRead();
private slots:void on_pushButton_clicked();private:Ui::widget *ui;QSerialPort *serialport;
};#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
widget::widget(QWidget *parent) :QWidget(parent),ui(new Ui::widget)
{ui->setupUi(this);serialport = new QSerialPort(this);connect(serialport,SIGNAL(readyRead()),this,SLOT(serialPortReadyRead()));QList<QSerialPortInfo> ports=QSerialPortInfo::availablePorts();for(int i=0;i<ports.count();i++){QSerialPortInfo info=ports.at(i);qDebug()<<"串口"<<i+1<<":"<<info.portName();}QString name="COM2";serialport->setPortName(name);if (!serialport->open(QIODevice::ReadWrite)){qDebug()<<"错误,串口无法打开,可能被占用!";QMessageBox::about(this,"错误","串口无法打开,可能被占用!");serialport->close();return ;}int baudRate=115200;serialport->setBaudRate(baudRate);serialport->setStopBits(QSerialPort::OneStop);serialport->setDataBits(QSerialPort::Data8);serialport->setParity(QSerialPort::NoParity);serialport->setFlowControl(QSerialPort::NoFlowControl);
}widget::~widget()
{delete ui;
}void widget::serialPortReadyRead()
{QByteArray temp = serialport->readAll();qDebug()<<"recv:"<<temp;
}void widget::on_pushButton_clicked()
{QByteArray buff=(ui->lineEdit->text().toLocal8Bit());//写入数据serialport->write(buff);
}

效果:


http://www.ppmy.cn/embedded/38025.html

相关文章

gitlab集群高可用架构拆分部署

目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…

在线音视频下载

https://cobalt.tools/ 支持 bilibili 等网站

小白入门:创建一个SpringBoot项目

前言 我们在创建SpringBoot项目时候&#xff0c;会出现不确定和报错的情况很多&#xff0c;大家可以按照我的做法来简单创建一个SpringBoot项目 1.环境配置 下载安装并配置jdk1.8下载apache mavenidea软件 2.开始创建项目 Server URL&#xff1a;初始是start.spring.io,我…

云HIS源码,基于云计算的医院临床信息系统(有应用案列)

云HIS全套商业源码&#xff0c;基于云计算的医院临床信息系统 提供预约挂号、门急诊收费、门诊医生站、护士工作站、药房药库管理、电子病历、住院医生站、住院护士工作站、住院登记结算、出院管理、病案管理、医药价格管理、财务管理、统计查询、会员管理等业务及管理功能。 …

图的存储结构

图的存储 以存点方式存储图 邻接矩阵 vector<vector<int>>v(MAX,vector<int>(MAX,0));邻接表 unordered_map<int,vector<int>> head;以存边方式存储图 链式前向星(静态链表存储邻接表) int h[MAX],num;//head:点集,用于存储以该点为尾的最…

【文献解析】NeRF的原理是什么

论文&#xff1a;https://arxiv.org/abs/2003.08934 TensorFlow代码&#xff1a;https://github.com/bmild/nerfPyToch代码&#xff1a;https://github.com/yenchenlin/nerf-pytorch 一、文章概述 1.问题导向 从新视点生成照片级真实感输出需要正确处理复杂的几何体和材质反…

VALSE 2024 Workshop报告分享┆面向隐私保护数据的联邦因果关系推断

2024年视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道&#xff0c;方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

【TypeScript枚举简介以及使用方法】

TypeScript 枚举&#xff08;Enum&#xff09;是一种特殊的数据类型&#xff0c;它允许我们为一组命名的常量分配整数值。默认情况下&#xff0c;第一个枚举成员的值为 0&#xff0c;后续成员的值会依次递增。但是&#xff0c;你也可以显式地为枚举成员赋值。 枚举简介 枚举是…