我的电赛日记(一)---HMI USART串口屏

HMI USART串口屏

作为在电赛中负责软件部分的成员,学会使用单片机进行数据和信息的显示是必要的,大部分人会选择使用oled或者TFT屏幕去进行显示,但是使用过的人都知道这样会比较复杂,会加大程序的复杂度,因此通过他人的建议,我开始学习并使用串口屏进行显示,下面是我学习串口屏时的经验和总结:
我的电赛日记(一)---HMI USART串口屏_第1张图片

上面这个是我使用的串口屏的型号,电阻式触摸屏,只有四根线,VCC GND TX RX,3.5寸基本完全满足交互式界面的大小,价格大概几十元。

一、硬件连接
我一般使用stm32比较多,因此这里就用stm32作为主控,我选用的是STM32F103ZET6最小系统板作为主控,其实使用C8T6也是可以的,主要是因为当时跟着正点原子学习的时候使用的是精英版,因此用ZET6就用习惯了,毕竟资源多还是要舒服一点。
我的电赛日记(一)---HMI USART串口屏_第2张图片

板上资源:这里使用到的是USART3和UART1,USART3和串口屏相连,UART1和电脑相连(默认)
IO连接
VCC----VCC
GND----GND
TX-----PB11
RX-----PB10
一共就四根线,连接非常方便。
二、STM32软件设计
软件方面呢为了既能使用串口给串口屏发送信息,也能通过串口接收串口屏发来的信息,因此设计功能如下:
1.串口屏上会显示一个数字Freq,并且该数字每秒会+1,可以通过屏幕上的按键控制每秒增加的数值。
2.数字Freq每更新一次,就会将该数字发送给单片机一次
3.单片机每接收到一次该数字,就会将该数字再从USART1发送给电脑的串口助手
4.单片机每隔几毫秒给串口屏发送一次指令,让串口屏上的波形控件增加一个点

不墨迹就直接放程序了,看不懂程序的可以留言:

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usart3.h"
#include "timer.h" 

/************************************************
************************************************/
 int main(void)
 {		
	int b;
	u16 t;  
	u16 len;	
	u16 times=0;
	delay_init();	    	 //延时初始化  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组
	uart_init(115200);	 //usart1初始化波特率115200
	usart3_init(115200);	 //usart3初始化波特率115200
 	while(1)
	{
		if(USART3_RX_STA&0x8000)
		{					   
			len=USART3_RX_STA&0x3fff;//得到此次接受数据的长度
			printf("\r\n您发送的消息为:\r\n\r\n");
			for(t=0;t<len;t++)
			{
				//USART_SendData(USART1, USART3_RX_BUF[t]);//向串口一发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
			}
			b=(USART3_RX_BUF[0]);
			printf("%d",b);
			printf("\r\n\r\n");
			USART3_RX_STA=0;
		}
			delay_ms(1000);
			{
				u3_printf("add 4,0,100",a); //波形空间上添加一个点
				u3_printf("\xff\xff\xff");  //结束标志
			}   
	}	 
 }

这段程序基本都是由正点原子的例程改编的,只是简单的两个串口的通信,主要有几点需要注意:
(都是我踩过的坑)
1向串口屏发送指令时,后面一定要接\xff\xff\xff,作为结束指令,否则串口屏不知道你这段话是否说完了,具体可见最后一行代码。
2如果你想接收串口屏发来的字符或者整型浮点数的信息,一定要注意定义的类型,例如当USART_RX_BUF[ ]这个用来当作接收缓冲区的数组是char型时,那么如果你想接收它发来的字符型信息时可以直接调用这个数组,但当你是想调用接收到的整数或者浮点数时,不能直接使用这个数组,否则显示会出现乱码,你可以像我代码中写的那样,定义一个int型的变量b,然后用b去获取USART3_RX_BUF这个数组中的整型常量,这样再进行显示就不会乱码了。

三、串口屏界面设计
HMI USART这款串口屏的教程挺多的,无论是它自带的还是网络上其他人拍的视频,都有很多资源可以去学习,这里我就放一个官方最常用的一个网址吧:串口屏帮助中心
无论是学习还是查找指令都可以在这个网站中找到!然后是我设计的串口屏界面,大致如下:
我的电赛日记(一)---HMI USART串口屏_第3张图片我的电赛日记(一)---HMI USART串口屏_第4张图片两个界面,第一个是用来显示曲线的主要验证功能4,第二个是用来显示数字Freq的主要验证功能1。
具体如何设计大家可以根据自己的情况来,我这个只是一个比较简单的例子。

四、总结
串口屏能做到的功能远不止如此,因此还有许多需要学习与实践的,不过熟练运用串口屏可以说在某种程度上是可以取代常用的oled TFT这种液晶屏的,除非题目有功耗要求,那另当别论。在此我只是分享我在学习串口屏中遇到的问题以及总结的经验,如果有问题大家也可以一起讨论!

最后我把程序的源代码以及串口屏的工程放在下方,大家有需要可以借鉴学习!
链接:https://pan.baidu.com/s/1Gk2g_cON9bCM40BahFyajA
提取码:8i16

你可能感兴趣的:(单片机,stm32,c++)