STM32f4日记4之HMI智能串口屏与单片机串口通信实验(能通过按下串口屏图片来控制单片机上LED灯闪灭)

6 篇文章 2 订阅
2 篇文章 1 订阅

STM32f4日记4之HMI智能串口屏与单片机串口通信实验(能通过按下串口屏图片来控制单片机上LED灯闪灭)

板子:stm32f407zgt6正点原子迷你版
串口屏:淘晶驰HMI电容触摸屏3.5寸
//

作者:shawn
2021.1.22
14:55
All rights reserved

如果你觉得对你有帮助,请点赞同,这对我很重要,谢谢。
//

一、器材介绍
HMI智能串口屏
在这里插入图片描述

在这里插入图片描述
串口屏的图形化编辑是开发利器,参数如上
串口屏可以通过***简单的编辑***达到非常理想的效果

二、硬件连接
串口屏一共4个口:RX、TX、5V、GND
1.单片机初始化USART1,对应正点原子板子上PA9、PA10。
2.因为两个IO口都是用跳线帽接好的,我们将跳线帽拔掉,将RX接PA9,将TX接PA10(接线非常重要,PA10为单片机RX口,PA9为单片机TX口)
3.记得设置单片机跟串口屏的波特率相同,我将他们两个都设置为9600(推荐串口屏使用SD卡下载,2秒就能下好,而串口下载需要2分钟)

三、过程讲解
1.想要两个电子产品之间产生交互一定要有以下过程:发送数据,数据分析,代码执行
2.关于发送数据串口屏可通过printh发送(此代码发送的是hex数据也就是16进制数据)
3.根据正点原子的串口通信协议,为保证接受数据的真实有效编写了一个通信协议

	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
	{
		Res =USART_ReceiveData(USART1);//(USART1->DR);	
		
		if((USART_RX_STA&0x8000)==0)
		{
			if(USART_RX_STA&0x4000)
			{
				if(Res!=0x0a)USART_RX_STA=0;
				else USART_RX_STA|=0x8000;	
			}
			else 
			{	
				if(Res==0x0d)USART_RX_STA|=0x4000;
				else
				{
					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
					USART_RX_STA++;
					if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;  
				}		 
			}
		}   		 
  } 

定义了一个变量USART_RX_STA来进行串口通信标志的分析,定义USART_RX_BUF(数组)来存储收到数据
如有不懂可以观看视频点击此处
这个视频会具体讲解这段代码
这段代码说明只有收到的数据为0x0d 0x0a结尾才是有效数据

四、代码示例

usart.c里面
基本配置我就不说了,使能引脚啥的,详细可以看看我的链接里面代码
最重要的是void USART1_IRQHandler(void) 这个函数用来写usart1的中断,中断里面就是通行协议
usart.h里面

#define USART_REC_LEN  			200  
#define EN_USART1_RX 			1		
	  	
extern u8  USART_RX_BUF[USART_REC_LEN]; 
extern u16 USART_RX_STA;         		
void uart_init(u32 bound);
#endif

主函数里面代码

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"


int main(void)
{ 
 
	u8 t;
	u8 len;	
	u16 times=0;  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init(168);		
	uart_init(9600);	
	LED_Init();		  		
	while(1)
	{
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;
			USART_RX_STA=0;
			
if(!(strcmp(USART_RX_BUF,"1"))) 
			{
			    LED0=0;
			}
      if(!(strcmp(USART_RX_BUF,"2"))) 
			{
			    LED0=1;
			}
		
			delay_ms(10);   
		}
	}
}


下面给出串口屏代码编写
在这里插入图片描述
在这里插入图片描述
这两个图片导入串口屏工程中
一个作为开灯一个作为关灯
设置一个***双态按钮***来实现
按下事件里面写

if(bt0.val==1)
{
  bt0.pic=1
  printh 31
  printh 0d
  printh 0a
}else
{
  bt0.pic=0
  printh 32
    printh 0d
  printh 0a
}

记得在program.s里面加入

bauds=9600
bkcmd=3
dims=100

来确保波特率为9600
下面是调试视频我放在网盘里面了(被百度网盘处理过,可能不怎么清晰,见谅)

链接:https://pan.baidu.com/s/1_7tiJ2xq_gpxV_PdpD2CmQ 
提取码:clz6 
复制这段内容后打开百度网盘手机App,操作更方便哦

之后就可以进行串口通信了+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

五、实验效果
按下串口屏图片,灯亮,再按,灯灭

六、思考拓展
虽然这个实验看起来很简单,但却是简单化处理矩阵键盘的基础,可以自行设计各种图片按键,达到非常理想的效果,需要读者自己的探索。

七、单片机代码
点这里
我设置了关注就可以免费下载

作者:shawn
2021.1.22
14:55
All rights reserved

  • 48
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
要实现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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@SHAWN_shawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值