【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
之前我们写过一篇文章,上面说的是如何利用串口对mcu进行控制,即如果利用串口实现mcu led灯的点亮和熄灭。输入1的时候,点亮;输入2的时候,熄灭。当时,我们是通过mobaxterm实现了控制。实际软件开发的时候,对于上位机,我们一般都是用qt界面来实现的,一方面显得比较正规一点,另外一方面也显得容易操作一点。
串口232也是比较实际项目中经常使用的接口。我们看下如果是用qt进行开发,应该如何来做。
1、整个数据处理的流程
其中qt是指qt上位机,board指的是开发板,st-link v2是烧录器,keil是stm32固件编译软件。qt和board之间的通信是usb转串口,board和st-link v2之间的通信是swd,keil和st-link v2之间的通信是usb。过程有点绕,稍微整理下可以搞清楚的。
2、创建qt工程
关于keil开发的部分,前面都已经完成了,下面就来做qt的部分。首先还是按照qt的wizard,创建一个widget工程。
3、设计界面
界面部分主要就是qt的ui文件,简单的做法就是引入两个按钮就可以了。
4、头文件设计
头文件设计的部分,主要就是引入回调函数、引入QSerialPort这个类。这两个部分做好了,也就可以开始处理串口的数据了。另外还有一点需要注意的就是,需要引入QSerialPort头文件。
#pragma once
#include <QtWidgets/QMainWindow>
#include <QtSerialPort/QSerialPort>
#include "ui_QtWidgetsApplication.h"
class QtWidgetsApplication : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication(QWidget *parent = nullptr);
~QtWidgetsApplication();
private:
Ui::QtWidgetsApplicationClass ui;
QSerialPort serial;
private slots:
void on_clicked();
void off_clicked();
};
5、cpp文件实现
定义好了头文件,cpp文件基本上按部就班去做就好了。构造函数实现了按钮和回调函数的绑定,同时初始化好了结构体serial,配置了波特率等基本参数。析构函数则主要是关闭串口。两个回调函数,则分别是发送两个字符串内容。其中,串口的编号,大家根据自己的实际情况修改下即可。还有就是lib库的添加,不然无法链接通过。
#include "QtWidgetsApplication.h"
#pragma comment(lib, "C:/Qt/Qt5.12.5/5.12.5/msvc2017/lib/Qt5SerialPortd.lib")
QtWidgetsApplication::QtWidgetsApplication(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton1, &QPushButton::clicked, this, &QtWidgetsApplication::on_clicked);
connect(ui.pushButton2, &QPushButton::clicked, this, &QtWidgetsApplication::off_clicked);
serial.setPortName("COM12");
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
serial.open(QIODevice::ReadWrite);
}
QtWidgetsApplication::~QtWidgetsApplication()
{
serial.close();
}
void QtWidgetsApplication::on_clicked()
{
QByteArray data = "1";
serial.write(data);
serial.waitForBytesWritten(1000);
}
void QtWidgetsApplication::off_clicked()
{
QByteArray data = "2";
serial.write(data);
serial.waitForBytesWritten(1000);
}
6、测试和验证
我们先按照上面的流程图把数据线连接好。连接好之后,再确认串口号。最后插上usb hub,毕竟usb接口比较多,全部接到hub上更容易一点。最后,打开qt应用,单击ON,观察led灯是否亮起;单击OFF,单击led灯是否熄灭。如果整个流程没有问题的,那么这个最简单的上位机-mcu联调,就算是测试成功了。