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函数设置多个串口名进行选择)
开发板和上位机连接完毕
之后单片机上电,串口发送信号,上位机就可以接收读取。
上位机可以根据提取的信号,在程序里设置不同的代码进行后续操作