Qt5实现上位机与串口通信

7 篇文章 0 订阅

Qt助手内搜索: Qt Serial Port 为串口的相关函数

1.添加串口头文件:

#include<QSerialPort>		//使用串口功能
#include<QSerialPortInfo>   //串口输出信息

之后就可以直接操作波特率等等的串口相关内容

2.工程文件添加串口

.pro文件内:

QT += core gui \
		serialport

3.串口使用

先正常创建UI

**cpp文件的主窗口构造函数内:**
ui->控件对象->控件函数(参数);
	。。。
	。。。
	 。。
3.1 通过 按键 控制串口
此函数不完整,函数是静态的无法接受3.2的信号

右击ui中对应按钮,转到槽,生成槽函数
打开串口 ,串口初始化成员函数

**cpp文件内:**
void widget:: 按钮1()
{
	QSerialPort *ser = new QSerialPort (this);  //创建串口对象

	ser -> setPortName ("COM3"); 				 //连接串口号
	ser -> setBaudRate (QSerialPort::Baud9600);	 //选择波特率
	ser -> setDateBits (QSerialPort::Date8);	 //设置数据位为8位
	ser -> setParity (QSerialPort::NoParity);	 //设置奇偶校验:无奇偶校验
	ser -> setStopBits (QSerialPort::OneStop);	 //设置停止位:1位
	ser -> setFlowControl (QSerialPort::NoFlowControl);//设置流控制:无流控制

	ser -> open (QIODevice :: ReadWrite )    //打开串口
}

关闭串口:

void widget:: 按钮2()
{
	ser -> close();        //另外一个按钮 关闭串口
}

widget.h文件内定义槽函数

public slots:
	void 按钮1();
	void 按钮2();
	void test();
3.2 访问串口内的数据
(注意:目前没有信号传递给ui的按键的函数3.1中,所以无法运行此函数,需要给3.1添加定时器,每过一段时间,3.1就接收一次3.2的函数)

创建一个字节数组arr,用于接收串口缓存数据 (串口数据储存在缓存区)

**cpp文件内**

void Widget :: test()
{
QByteArray  arr ;     				    创建:“字节数组”类型的数组
arr -> readAll();						用于接收 串口缓存的数据 
									//读取串口数据,储存到arr字节数组内

根据读取的数据,实现对应的功能,例如:

switch(arr[0]) 本上位机软件设置的是:仅一个字符表示一个动作,所以只需要第一个位置数据
{
	case 'w':	
			ui->label_test->setText(QString::fromLocal8Bit("w"));
			串口数据为G:控件内打印G
			break;
}

4.串口调试

用虚拟串口调试,电脑上的软件跟电脑的Qt界面之间串口通信
4.1 创建两个串口,两者进行通讯(就像电话号码,根据号码号进行拨通)

创建虚拟串口COM5和COM6,两者进行通讯
在这里插入图片描述
设备管理器可以查看串口
在这里插入图片描述

4.2 串口通信

打开串口调试助手,选择COM5 ,波特率9600,打开串口,输入数据,发送数据
自己制作的UI中,选择COM6,波特率9600,打开串口
在这里插入图片描述
此时Qt软件就能接收到这个信号,但是UI中没有反应
因为:无法做出相应,因为3.2的槽函数代码没有信号与其匹配。

4.3 创建定时器
(定时器过一段时间相应一次,接收和发送信号,使3.2的静态槽函数变为动态)

void widget:: 按钮1()
{
	QTimer  s1 = new QTimer;							创建定时器
	connect(s1,SIGNAL(timeout()),this,SLOT(test());		每过一段时间(s1的时间满了),
													   主窗口接受一次3.2的函数
	s1-> start(1000);				s1每过1000ms满一次
	
上三行代码:每过1s,执行一次3.2的函数
然后3.2接收串口发送的信号

	QSerialPort *ser = new QSerialPort (this);  

	ser -> setPortName ("COM2"); 				
	ser -> setBaudRate (QSerialPort::Baud9600);	 
	ser -> setDateBits (QSerialPort::Date8);	 
	ser -> setParity (QSerialPort::NoParity);	 
	ser -> setStopBits (QSerialPort::OneStop);	
	ser -> setFlowControl (QSerialPort::NoFlowControl);

	ser -> open (QIODevice :: ReadWrite )   
}

5.上位机实际串口通信

5.1 连接上位机和开发板

开发板连接电脑
查看接口名称
在这里插入图片描述
上位机选择同样的参数
(3.1中设置的串口对象就是COM3,9600)
(3.1可以用if函数设置多个串口名进行选择)
在这里插入图片描述
开发板和上位机连接完毕



之后单片机上电,串口发送信号,上位机就可以接收读取。
上位机可以根据提取的信号,在程序里设置不同的代码进行后续操作

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值