赞
踩
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
之前我们写过一篇文章,上面说的是如何利用串口对mcu进行控制,即如果利用串口实现mcu led灯的点亮和熄灭。输入1的时候,点亮;输入2的时候,熄灭。当时,我们是通过mobaxterm实现了控制。实际软件开发的时候,对于上位机,我们一般都是用qt界面来实现的,一方面显得比较正规一点,另外一方面也显得容易操作一点。
串口232也是实际项目中经常使用的接口。我们看下如果是用qt进行开发,应该如何来做。
其中qt是指qt上位机,board指的是开发板,st-link v2是烧录器,keil是stm32固件编译软件。qt和board之间的通信是usb转串口,board和st-link v2之间的通信是swd,keil和st-link v2之间的通信是usb。过程有点绕,稍微整理下可以搞清楚的。
关于keil开发的部分,前面都已经完成了,下面就来做qt的部分。首先还是按照qt的wizard,创建一个widget工程。
界面部分主要就是qt的ui文件,简单的做法就是引入两个按钮就可以了。
头文件设计的部分,主要就是引入回调函数、引入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();
-
- };
定义好了头文件,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);
- }
-
我们先按照上面的流程图把数据线连接好。连接好之后,再确认串口号。最后插上usb hub,毕竟usb接口比较多,全部接到hub上更容易一点。最后,打开qt应用,单击ON,观察led灯是否亮起;单击OFF,单击led灯是否熄灭。如果整个流程没有问题的,那么这个最简单的上位机-mcu联调,就算是测试成功了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。