usart hmi(串口屏)介绍

本文深入解析了USARTHMI,一种通过串口实现设备与MCU交互的技术。详细介绍了HMI的概念,即人机接口,以及usarthmi如何通过USART 232连接使设备能够与用户MCU实时通讯,实现页面切换和组件属性变更。此外,还提供了陶晶驰USARTHMI的命名规则、选型指南及软件下载资源。

什么是 HMI 

HMI是Human Machine  Interface 的缩写, “人机接口” ,也叫人机界面。

什么是usart hmi

usart hmi 就是设备封装好 底层功能以后,通过串口(USART  232)与用户 MCU 进行交互。

 MCU 可以随时通过 USART 发指令通知设备:切换某个页面或者改变某个组件的属性。

设备也可以随时通过 USART 通知用户 MCU 操作者:目前触摸了页面上的某个组件或者设备当前进入了某个页面。 

 

对于产品研发者来说,产品研发初期可以选型的接口无非就3种类型:RGB接口MCU总线接口串口HMI

 

陶晶驰USART HMI命名规则:

陶晶驰USART HMI选型指南:

USART HMI软件主界面介绍:

 

 

 

 

陶晶驰USART HMI:

    1. 基本型串口HMI资料包下载地址(内含USART HMI软件+资料+应用实例): 

    http://tftdata.tjc1688.com/USART HMI/USART HMI.rar

  2.USART HMI论坛

   http://bbs.tjc1688.com

<think>嗯,用户想用USARTHMI串口开发一个三子棋游戏。首先,我需要理清楚整个项目的流程。三子棋游戏通常需要显示棋盘、处理玩家输入、判断胜负等功能。结合串口的话,界面设计是关键,因为HMI串口是通过上位机软件设计界面,然后通过串口通信发送指令来控制显示内容。 首先,用户需要了解HMI串口的开发步骤。根据引用[1]和[2],HMI的上位软件用来设计界面,比如按钮、文本框等。然后,STM32通过USART发送指令给幕,比如更新某个控件的文本或属性。例如,sprintf函数可以将数据格式化为字符串发送,这在引用[2]中提到过,用来实时更新显示的数据。 接下来,游戏逻辑部分。三子棋需要棋盘的状态存储,玩家和电脑(或另一个玩家)的轮流落子。每次落子后,需要更新幕上的显示,比如在对应的格子显示X或O。同时,每次操作后要检查是否有胜负,或者是否平局。 可能的问题点在于如何将触摸的输入传输到STM32。HMI串口的触摸事件会通过串口发送数据给单片机,所以STM32需要解析这些数据,确定是哪个位置的按钮被按下,然后更新游戏状态。例如,每个棋盘格子可以对应一个按钮控件,当触摸时发送特定的指令,STM32接收后处理坐标,转换为棋盘的行列索引。 然后,游戏状态的更新需要同步到串口。每次落子后,STM32发送指令更新对应按钮的文本,显示X或O。同时,胜负判断后可能需要弹出提示信息,比如用另一个页面显示结果,或者直接更新某个文本框的内容。 还需要考虑游戏的重置功能,比如游戏结束后,如何清空棋盘,重新开始。这可以通过发送复位指令给串口,或者重新加载页面来实现。 代码结构方面,主循环中需要不断检测串口接收的数据,解析触摸事件,处理游戏逻辑,然后发送更新指令到幕。同时,ADC或者传感器数据可能不需要,但sprintf的使用在更新显示时是必须的,比如将行列位置转化为对应的控件名称。 可能遇到的挑战是串口通信的稳定性和响应速度,尤其是在频繁更新界面时。需要确保指令的正确格式,避免通信错误。此外,界面布局和控件命名需要与代码中的处理逻辑严格对应,否则会导致更新错误的位置。 总结下来,步骤应该是:1. 设计界面,创建按钮和显示控件;2. STM32初始化USART,配置中断接收;3. 解析触摸事件,更新游戏状态;4. 发送指令更新幕显示;5. 判断游戏结果并处理。需要参考引用中的示例,正确使用sprintf生成指令字符串,并处理通信协议。</think>### 基于USARTHMI串口的三子棋开发步骤 #### 1. **界面设计与控件布局** - **使用USART HMI上位软件**:设计游戏界面,包括: - 3x3的按钮控件(`btn1`~`btn9`)表示棋盘格子 - 文本框显示当前玩家(如`t0.txt`) - 胜负提示框(如`t1.txt`) - 复位按钮(`btn_reset`) - **控件属性绑定**:为每个按钮设置触摸事件返回指令(例如`click btn1,0`表示第1格被点击)[^1]。 #### 2. **STM32与串口通信协议** - **指令格式**:通过USART发送HMI协议指令,例如更新控件文本: ```c // 更新第1格显示为"X" sprintf(buf, "btn1.txt=\"X\"\xff\xff\xff"); HAL_UART_Transmit(&huart1, buf, strlen(buf), 100); ``` 引用[2]中提到的`sprintf`函数用于格式化字符串,末尾`\xff\xff\xff`是协议结束符[^2]。 #### 3. **核心代码实现** ```c // 定义棋盘状态 char board[9] = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}; // 解析触摸事件(示例) void parse_touch(uint8_t *data) { if(strstr(data, "click btn1")) update_board(0); // 第1格索引0 // 其他按钮类似... } // 更新棋盘及显示 void update_board(int pos) { if(board[pos] != ' ') return; // 禁止重复落子 board[pos] = current_player; // 'X'或'O' // 更新幕显示 sprintf(buf, "btn%d.txt=\"%c\"\xff\xff\xff", pos+1, current_player); HAL_UART_Transmit(&huart1, buf, strlen(buf), 100); check_winner(); toggle_player(); } ``` #### 4. **胜负判断逻辑** ```c bool check_winner() { // 行检查 for(int i=0; i<3; i++){ if(board[i*3] == board[i*3+1] && board[i*3+1] == board[i*3+2] && board[i*3] != ' ') show_result(); } // 列和对角线类似... } ``` #### 5. **复位功能实现** ```c // 收到复位指令时清空棋盘 void reset_game() { memset(board, ' ', 9); for(int i=1; i<=9; i++){ sprintf(buf, "btn%d.txt=\" \"\xff\xff\xff", i); HAL_UART_Transmit(&huart1, buf, strlen(buf), 100); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值