前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QT上位机串口控制MCU

QT上位机串口控制MCU

作者头像
秋名山码神
发布2023-11-18 14:58:05
3350
发布2023-11-18 14:58:05
举报
文章被收录于专栏:码神随笔码神随笔

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝


前言

本次给大家带来的是一个QT上位机的编写,最终页面如下:

在这里插入图片描述
在这里插入图片描述

开发工具:

  1. QT5
  2. Keil5
  3. mcu:野火指南者开发版,stm32F103

功能:上位机通过串口来控制开发板上的一个LED的亮灭

1. 上位机

1.1 上位机基础界面

在这里插入图片描述
在这里插入图片描述

实现效果:

在这里插入图片描述
在这里插入图片描述

1.2 上位机逻辑代码编写

  1. pro文件里面添加串口库
在这里插入图片描述
在这里插入图片描述
  1. widget.h文件包含串口头文件
代码语言:javascript
复制
#include <QSerialPort>
#include <QSerialPortInfo>
  • QSerialPort 类提供了操作串口的各种接口。
  • QSerialPortInfo 是一个辅助类,可以提供计算机中可用串口的各种信息。
  1. 添加QSerialPort成员
在这里插入图片描述
在这里插入图片描述
  1. 构造函数直接搜索所有可用串口
代码语言:javascript
复制
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);
}
在这里插入图片描述
在这里插入图片描述
  1. 编写槽函数

这块可以直接从ui跳转到槽来节省时间,默认读者已会,直接给出槽函数代码:

代码语言:javascript
复制
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();
}

设置串口参数代码解释:

  1. setPortName(ui->U_comboBox->currentText()):设置串口的名称,通过ui->U_comboBox获取下拉框当前选中的文本。
  2. setBaudRate(ui->B_comboBox->currentText().toInt()):设置串口的波特率,通过ui->B_comboBox获取下拉框当前选中的文本,并将其转换为整数类型。
  3. setDataBits(QSerialPort::Data8):设置串口的数据位,这里设置为8位。
  4. setStopBits(QSerialPort::OneStop):设置串口的停止位,这里设置为1位。
  5. setParity(QSerialPort::NoParity):设置串口的校验位,这里设置为无校验位。

MCU代码来自野火:

代码语言:javascript
复制
#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**********************/

最后

如果本文对你有所帮助,还请三连支持一下博主!

请添加图片描述
请添加图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 上位机
    • 1.1 上位机基础界面
      • 1.2 上位机逻辑代码编写
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档