STM32与串口屏交互(USART HMI)

STM32与串口屏交互(USART HMI)


前言

最近大创和嵌入式比赛都使用到了串口屏,刚开始学习也没什么头绪,后来瞎搞搞就能用了,但是我设计的非常简单,还有很多需要优化的地方,后面我会将代码发出来。为什么我要用串口屏呢?串口屏综合了以上屏幕的特点,即尺寸大、管脚少,能够充分减少占用单片机的I/O资源,且支持触摸。串口屏可作为输出设备(显示)以及输入设备(按键),开发难度小,操作简单,软件要求低且拥有专门的上位机辅助开发,重点是:看着牛


一、前期准备

界面设计就不多做叙述,我直接写关于stm32与串口屏交互的部分

二.关于在上位机USART HMI里面的一些配置

1.首先是在program.s里面定义一个全局变量的标志位
在这里插入图片描述

2.我这边使用的是双态按钮,只有0和1两个值,通过按下后的值向单片机发送一个值,这里是使用了prints函数直接通过串口来发送的
在这里插入图片描述到这里串口屏上位机代码的部分就写完了,我写的很简单,也没个帧头帧尾的,大家可以加上。

三.stm32的代码部分

关于单片机的代码部分,我是用的是stm32f407zgt6的最小系统板,这里必须注意下,最小系统板和核心板要 避免使用串口1,因为下载程序的时候会占用(PA9 PA10)这两个引脚,所以这个问题困扰了我很久,后来突然想到这件事情,我换成串口2就正常了**

下面是代码展示

#include "tjc.h"
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

///*
//* 描述: HAL库实现多串口使用printf输出
//* 参数: huart:对应的串口结构体
//* 返回: 无*/
void Uart_printf(UART_HandleTypeDef *huart,char *format, ...)
{
   
  char buf[512]; //定义临时数组,根据实际发送大小微调

  va_list args;
  va_start(args, format);
  uint16_t len = vsnprintf(
### 实现串口STM32之间按键交互的方法 为了实现串口STM32之间的按键交互,主要依赖于UART接口进行数据传输。当按下幕上的按钮时,串口会向STM32发送特定命令或者字符序列;反之亦然,STM32也可以主动推送消息至显示上更新界面状态。 #### UART初始化配置 在开始之前,需确保已经完成了基本的硬件连接以及软件环境搭建工作,并正确设置了USART参数以便两设备间能正常通讯。这里以STM32CubeMX工具为例说明如何快速完成外设初始化设置[^2]。 ```c // 使用STM32CubeMX自动生成代码框架后,在main.c文件中的User Code Section部分添加如下代码: /* USER CODE BEGIN USART1_Init */ HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxData, 1); /* USER CODE END USART1_Init */ // 定义全局变量用于存储接收到的数据 volatile uint8_t RxData; ``` #### 接收来自串口的消息处理逻辑 每当检测到新的输入到达时触发中断服务程序ISR(Interrupt Service Routine),此时可调用`HAL_UART_IRQHandler()`函数来响应事件并读取消息内容。随后依据实际需求解析这些信息判断是否为预期的操作指令,如点击某个虚拟按键产生的反馈信号等。 ```c void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance==USART1){ /* Process received data here */ switch(RxData){ case 'A': // 假定'A'代表第一个按键被按下的情况 // 执行相应动作... break; default: break; } // 继续监听下一个字节的到来 HAL_UART_Receive_IT(&huart1,(uint8_t*)&RxData,1); } } ``` #### 向串口发送控制指令示例 假设现在要通知对方某项操作已完成,则可以通过下面的方式构建一条简单的ASCII码格式化字符串并通过串行端口发出。 ```c float temperature = getTemperature(); // 获取当前温度值作为演示用途 char buffer[64]; snprintf(buffer,sizeof(buffer),"page0.t3.txt=\"%+.1f°C\"",temperature); if(HAL_OK != HAL_UART_Transmit(&huart1,(uint8_t *)buffer,strlen(buffer),HAL_MAX_DELAY)){ Error_Handler(); } ``` 上述过程展示了怎样利用`sprintf`/`snprintf`这类标准库函数将不同类型的数据转换成适合显示的形式后再传送给目标装置[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值