🙌秋名山码民的主页
😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
获取源码,添加WX
目录
- 前言
- 1. 上位机
- 1.1 上位机基础界面
- 1.2 上位机逻辑代码编写
- 最后
前言
本次给大家带来的是一个QT上位机的编写,最终页面如下:
开发工具:
- QT5
- Keil5
- mcu:野火指南者开发版,stm32F103
功能:上位机通过串口来控制开发板上的一个LED的亮灭
1. 上位机
1.1 上位机基础界面
实现效果:
1.2 上位机逻辑代码编写
- pro文件里面添加串口库
- widget.h文件包含串口头文件
#include <QSerialPort>
#include <QSerialPortInfo>
- QSerialPort 类提供了操作串口的各种接口。
- QSerialPortInfo 是一个辅助类,可以提供计算机中可用串口的各种信息。
- 添加QSerialPort成员
- 构造函数直接搜索所有可用串口
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
QStringList serialNamePort;
ui->setupUi(this);
this->setWindowTitle("serial_led");
// 创建一个串口对象
serialPort = new QSerialPort(this);
// 搜索可用串口
foreach (const QSerialPortInfo &inf0, QSerialPortInfo::availablePorts()) {
serialNamePort<<inf0.portName();
}
ui->U_comboBox->addItems(serialNamePort);
}
- 编写槽函数
这块可以直接从ui跳转到槽来节省时间,默认读者已会,直接给出槽函数代码:
void Widget::on_open_usart_Button_clicked()
{
// 串口设置
serialPort->setPortName(ui->U_comboBox->currentText());
serialPort->setBaudRate(ui->B_comboBox->currentText().toInt());
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setParity(QSerialPort::NoParity);
//提示
if(true == serialPort->open(QIODevice::ReadWrite))
{
QMessageBox::information(this,"Message","OpenSucceed");
}
else
{
QMessageBox::critical(this,"Message","OpenFailed");
}
}
void Widget::on_open_led_pushButton_clicked()
{
serialPort->write("1\n");
qDebug("ON\n");
}
void Widget::on_close_led_pushButton_clicked()
{
serialPort->write("8\n");
qDebug("OFF\n");
}
void Widget::on_close_usart_pushButton_clicked()
{
//关闭串口
serialPort->close();
}
设置串口参数代码解释:
setPortName(ui->U_comboBox->currentText())
:设置串口的名称,通过ui->U_comboBox
获取下拉框当前选中的文本。setBaudRate(ui->B_comboBox->currentText().toInt())
:设置串口的波特率,通过ui->B_comboBox
获取下拉框当前选中的文本,并将其转换为整数类型。setDataBits(QSerialPort::Data8)
:设置串口的数据位,这里设置为8位。setStopBits(QSerialPort::OneStop)
:设置串口的停止位,这里设置为1位。setParity(QSerialPort::NoParity)
:设置串口的校验位,这里设置为无校验位。
MCU代码来自野火:
#include "stm32f10x.h"
#include "./led/bsp_led.h"
#include "./usart/bsp_usart.h"
static void Show_Message(void);
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
char ch;
/* 初始化RGB彩灯 */
LED_GPIO_Config();
/* 初始化USART 配置模式为 115200 8-N-1 */
USART_Config();
/* 打印指令输入提示信息 */
Show_Message();
while(1)
{
/* 获取字符指令 */
ch=getchar();
printf("接收到字符:%c\n",ch);
/* 根据字符指令控制RGB彩灯颜色 */
switch(ch)
{
case '1':
LED_RED;
break;
case '2':
LED_GREEN;
break;
case '3':
LED_BLUE;
break;
case '4':
LED_YELLOW;
break;
case '5':
LED_PURPLE;
break;
case '6':
LED_CYAN;
break;
case '7':
LED_WHITE;
break;
case '8':
LED_RGBOFF;
break;
default:
/* 如果不是指定指令字符,打印提示信息 */
Show_Message();
break;
}
}
}
/**
* @brief 打印指令输入提示信息
* @param 无
* @retval 无
*/
static void Show_Message(void)
{
printf("\r\n 这是一个通过串口通信指令控制RGB彩灯实验 \n");
printf("使用 USART 参数为:%d 8-N-1 \n",DEBUG_USART_BAUDRATE);
printf("开发板接到指令后控制RGB彩灯颜色,指令对应如下:\n");
printf(" 指令 ------ 彩灯颜色 \n");
printf(" 1 ------ 红 \n");
printf(" 2 ------ 绿 \n");
printf(" 3 ------ 蓝 \n");
printf(" 4 ------ 黄 \n");
printf(" 5 ------ 紫 \n");
printf(" 6 ------ 青 \n");
printf(" 7 ------ 白 \n");
printf(" 8 ------ 灭 \n");
}
/*********************************************END OF FILE**********************/
最后
如果本文对你有所帮助,还请三连支持一下博主!