STM32物联网项目——HMI串口屏实现人机互联_stm32驱动串口屏(1)

上位机软件界面认识

讲几个常用或较重要的工具和页面:

  1. 下载:通过串口将设计的界面下载给串口屏
  2. 工具箱:里面有许多控件令我们挑选,也就是设计自己想要的GUI,例如,点击文本控件,插入到GUI:
  3. 在界面右下角的窗口,可以操作控件的属性,例如:将刚插入的文本控件文本改为“你好”,背景色为蓝色:

当如,要想写入自己想要的文本,必须要先创建自己的字库,并添加到左下角窗口字库页面

 

4.Page 页面

工具箱里随意按置一个控件都会有按下事件和弹起事件,选择控件后,在命令窗口的弹起事件输入page 1(1是页面的id号,也可改为自己更改后的名字),当使用时,点击控件,就会跳到相应的界面

勾选“发送键值”,串口屏会发送相应信息给MCU。

设计出了自己想要的GUI界面后,就可以点击左上角的调试功能,实现自己的界面。

实例

设计好自己的GUI界面后,我们就要下载到串口屏上了,首先在硬件上,将串口屏的发送和接收引脚与单片机的串口接收、发送引脚连好,之后,点击Program.s里设置波特率为115200,再点击下载

代码:

这里只给出部分代码作参考

HMI协议(接收串口屏键值信息)代码:

/*
	* @name   HMI_Protocol
	* @brief  接口协议 - 接收键值信息
	* @param  None
	* @retval None      
*/
static void HMI_Protocol(void) 
{
		uint8_t Temp_Array[7] = {0x00};
		uint8_t i = 0,Index = 0;
	
		//串口1停止DMA接收
		HAL_UART_DMAStop(&huart1);
	
		//读取缓存,一共7个字节,起始值为0x65
		for(i=0;i<HMI_Rec_Buffer_LENGTH;i++)
		{
			//检测起始值0x65
			if(Index == 0)
			{
				if(*(HMI.pucRec_Buffer+i) != 0x65)
					continue;
			}
			
			Temp_Array[Index] = *(HMI.pucRec_Buffer+i);

			//已读取7个字节
			if(Index == Protocol_Data_LEN)
				break;
			
			Index++;
		}
		
		//串口1开启DMA接收
		HAL_UART_Receive_DMA(&huart1,HMI.pucRec_Buffer,(uint16_t)20);
		
		//处理数据
		if(Index == Protocol_Data_LEN)
		{
			//主页面键值信息
			if(Temp_Array[1] == 0x00)
			{
				//控件2弹起
				if((Temp_Array[2] == 0x02) && (Temp_Array[3] == 0x00))
				{
					//切换至数码管界面
					HMI.Page = Page_Display;
					Display.Disp_Clr();
				}
				
				//控件3信息
				if((Temp_Array[2] == 0x03) && (Temp_Array[3] == 0x00))
				{
					//切换至步进电机页面
					HMI.Page = Page_Step_Motor;
					
					Display.Disp_Clr();
					//ÏÔʾµç»úȦÊý
					Display.Disp_HEX(Disp_NUM_6,Unipolar_Step_Motor.Circle,Disp_DP_OFF);
					//ÏÔʾµç»úËÙ¶È
					switch(Unipolar_Step_Motor.Speed)
					{
						case 100: Display.Disp_HEX(Disp_NUM_1,1,Disp_DP_OFF); break;
						case 90:  Display.Disp_HEX(Disp_NUM_1,2,Disp_DP_OFF); break;
						case 80:  Display.Disp_HEX(Disp_NUM_1,3,Disp_DP_OFF); break;
						case 70:  Display.Disp_HEX(Disp_NUM_1,4,Disp_DP_OFF); break;
						case 60:  Display.Disp_HEX(Disp_NUM_1,5,Disp_DP_OFF); break;
						case 50:  Display.Disp_HEX(Disp_NUM_1,6,Disp_DP_OFF); break;
						case 40:  Display.Disp_HEX(Disp_NUM_1,7,Disp_DP_OFF); break;
						case 30:  Display.Disp_HEX(Disp_NUM_1,8,Disp_DP_OFF); break;
						case 20:  Display.Disp_HEX(Disp_NUM_1,9,Disp_DP_OFF); break;
						default: break;
					}
				}
				//控件5弹起
				if((Temp_Array[2] == 0x05) && (Temp_Array[3] == 0x00))
				{
					//切换至NTC界面
					HMI.Page = Page_NTC;
					Display.Disp_Clr();
				}	
				//控件6弹起
				if((Temp_Array[2] == 0x06) && (Temp_Array[3] == 0x00))
				{
					//切换至蜂鸣器界面
					HMI.Page = Page_Buzzer;
					Display.Disp_Clr();
				}
			}
			
			//数码管页面信息
			if(Temp_Array[1] == 0x01)
			{
				//控件1弹起
				if((Temp_Array[2] == 0x01) && (Temp_Array[3] == 0x00))
				{
					//切换至主页面
					HMI.Page = Page_Main;				
					Display.Disp_Clr();
				}
			}
			
			//步进电机页面信息
			if(Temp_Array[1] == 0x02)
			{
				//控件11弹起
				if((Temp_Array[2] == 0x0B) && (Temp_Array[3] == 0x00))
				{
					//切换至主页面
					HMI.Page = Page_Main;
					Display.Disp_Clr();
					//关闭步进电机
					Unipolar_Step_Motor.Status = Stop_State;
					CLR_Motor_A;
					CLR_Motor_B;
					CLR_Motor_C;
					CLR_Motor_D;
					LED.LED_OFF(LED3);
					
					Unipolar_Step_Motor.Circle = 0;
				}
				
				//控件5弹起
				if((Temp_Array[2] == 0x05) && (Temp_Array[3] == 0x00))
				{
					HMI.Page_Step_Motor_KEY_Flag = TRUE;
					HAL_GPIO_EXTI_Callback(KEY1_Pin);
					HMI.Page_Step_Motor_KEY_Flag = FALSE;
				}
				
				//控件8弹起
				if((Temp_Array[2] == 0x08) && (Temp_Array[3] == 0x00))
				{
					HMI.Page_Step_Motor_KEY_Flag = TRUE;
					HAL_GPIO_EXTI_Callback(KEY2_Pin);
					HMI.Page_Step_Motor_KEY_Flag = FALSE;
				}
				
				//控件6弹起
				if((Temp_Array[2] == 0x06) && (Temp_Array[3] == 0x00))
				{
					HMI.Page_Step_Motor_KEY_Flag = TRUE;
					HAL_GPIO_EXTI_Callback(KEY3_Pin);
					HMI.Page_Step_Motor_KEY_Flag = FALSE;
				}
				
				//控件7弹起
				if((Temp_Array[2] == 0x07) && (Temp_Array[3] == 0x00))
				{
					HMI.Page_Step_Motor_KEY_Flag = TRUE;
					HAL_GPIO_EXTI_Callback(KEY4_Pin);
					HMI.Page_Step_Motor_KEY_Flag = FALSE;
				}				
			}
			//NTC页面信息
			if(Temp_Array[1] == Page_NTC)
			{
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/a56e6f0c40256ee544ba5aba50f3e48f.png)

![img](https://img-blog.csdnimg.cn/img_convert/5c4010a95b358ee34c41db7dcb511bbc.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/791e87ec7da7b8ea55393de8b2b01498.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/2a47de47c0fb66415b4d86c401cb1e5d.png)

![img](https://img-blog.csdnimg.cn/img_convert/cd7d0b882d607acfac17f7b9a6ac134f.png)

![img](https://img-blog.csdnimg.cn/img_convert/9b93991ca47335248076181b8a806b15.png)

![](https://img-blog.csdnimg.cn/img_convert/2f6293a9baecdc017a7db68d544e702d.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


91817)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现STM32按键控制陶晶驰HMI串口屏,首先需要了解STM32的按键输入和陶晶驰HMI串口屏的通信协议。 STM32的按键输入可以通过GPIO(通用输入输出)端口实现。可以通过配置相应引脚为输入模式,并启用上拉电阻或下拉电阻来实现按键的输入检测。当按键被按下时,对应的GPIO引脚状态将会改变。通过读取GPIO端口的输入状态,可以检测到按键的按下操作。 陶晶驰HMI串口屏主要通过串口通信与外部设备进行数据交互。常见的串口通信协议有RS232和RS485等。要实现STM32按键控制HMI串口屏,可以使用STM32的UART(通用异步收发器)模块与串口屏进行通信。通过配置串口的波特率、数据位、停止位、校验位等参数,可以建立起STM32串口屏之间的通信连接。通过发送特定的指令或数据包,可以实现串口屏的控制与操作。 在具体实现过程中,可以使用STM32的中断方式检测按键的按下,并在按键被按下时,通过串口发送相应的指令或数据包给串口屏串口屏在接收到这些指令或数据包后,根据其内部的程序逻辑进行相应的处理操作,以实现STM32按键的交互控制。 需要注意的是,在编写STM32的代码时,需要根据陶晶驰HMI串口屏的通信协议和指令集进行相应的编程处理。正确地解析和生成串口通信的数据包,以确保STM32HMI串口屏的通信能够正常进行。 总之,通过合理配置和编程STM32的按键输入和串口通信功能,结合陶晶驰HMI串口屏的通信协议,可以实现STM32按键控制HMI串口屏的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值