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

工具箱里随意按置一个控件都会有按下事件和弹起事件,选择控件后,在命令窗口的弹起事件输入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)
			{
				if((Temp_Array[2] == 0x03) && (Temp_Array[3] == 0x00))
				{
					//切换至主页面
					HMI.Page = Page_Main;				
					Display.Disp_Clr();
				}
			}
			//蜂鸣器页面信息
			if(Temp_Array[1] == Page_Buzzer)
			{
				//控件2弹起
				if((Temp_Array[2] == 0x02) && (Temp_Array[3] == 0x00))
				{
					//Çл»ÖÁÖ÷Ò³Ãæ
					HMI.Page = Page_Main;
					Display.Disp_Clr();
				}
				//控件3弹起
				if((Temp_Array[2] == 0x03) && (Temp_Array[3] == 0x00))
				{
					HMI.Page_Buzzer_Flag = TRUE;
					HAL_GPIO_EXTI_Callback(KEY1_Pin);
					HMI.Page_Buzzer_Flag = FALSE;
				}
			}
		}
}

最后

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

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

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

img

img

img

img

img

img

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

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

26767)]

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

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值