【开源串口屏方案】五步教你设计串口屏,30分钟快速上手
高通汉显
编辑于 2023年08月29日 02:57

前言

本文详细介绍串口屏原理、设计方法、实现步骤,给出完整代码实例,30分钟即可完成串口屏的设计使用。适合初学者快速上手。

一、什么串口屏?

串口屏是一种能够通过串行接口接收指令,并进行显示控制的液晶显示屏。它的主要优点是操作简单,接口统一,用GUI软件进行界面的快速编写与设计。

二、串口屏原理与组成

串口屏的组成部分:

1.显示屏:这是串口屏的核心部分,可以选择液晶显示屏或其他类型的显示屏.

2.微控制器:这是控制显示屏的关键部分。它可以接收和发送数据,控制显示屏的显示内

容。

3.串口通信接口: 这是微控制器和显示屏之间的通信接口。通常使用UART (通用异步收

发器) 接口。

4.电源:为显示屏和微控制器提供电源

5.嵌入式GUI软件: 采用高通GT-HMI,可以作为上位机Designer和下位机Engine的开源设计工具,帮助用户设计和实现自己的界面。

三、硬件制作

在高通GT-HMI官网上获取串口屏原理图,可参考制作自己的串口屏硬件。

四、实现方法

以GT-HMI显示模块为例,这是一个做好的串口屏板子,包含开源的软硬件。只需几个步骤就可以实现串口屏的控制。您将需要以下准备:

1. 硬件设备:

GT-HMI显示模块、一根USB转UART转接线、一台电脑,笔记本和台式机均可。   首先将USB转UART转接线连接到我们的GT-HMI显示模块上,然后将USB转UART转接线与您的电脑连接。

2. 环境依赖:

软件环境:KEIL5, 串口调试助手。硬件环境:USB转UART转接线,GTC-480272TFT43XP.

3. 界面设计:

在高通GT-HMI Designer设计界面,可以参考GT-HMI视频教程及文档资料。

4. 编写串口通信代码,示例如下:

1、串口uart3初始化:

void bsp_uart3_init(void)

{

UART_InitStructure UART_initStruct;

 PORT_Init(UART3_RX_PORT, UART3_RX_PIN, UART3_RX_SEL, 1); //GPIOM.0配置为UART0输入引脚

PORT_Init(UART3_TX_PORT, UART3_TX_PIN, UART3_TX_SEL, 0); //GPIOM.1配置为UART0输出引脚

 UART_initStruct.Baudrate = UART3_Baudrate;  //波特率

UART_initStruct.DataBits = UART_DATA_8BIT;  //8位数据位

 UART_initStruct.Parity = UART_PARITY_NONE;  //无校验位

  UART_initStruct.StopBits = UART_STOP_1BIT;  //1个停止位

   UART_initStruct.RXThreshold = _UART3_RX_BUFFER_SIZE;//设置FIFO个数

UART_initStruct.RXThresholdIEn = 1;//使能接收中断

UART_initStruct.TXThreshold = _UART3_Threshold_Size;//设置FIFO个数

UART_initStruct.TXThresholdIEn = 0;     //失能发送中断

UART_initStruct.TimeoutTime = 10; //10个字符时间内未接收到新的数据则触发超时中断

UART_initStruct.TimeoutIEn = 1;         //使能超时中断

 UART_Init(UART3, &UART_initStruct);

UART3->TOCR &= ~(1 << UART_TOCR_MODE_Pos);  

UART_Open(UART3);//开启uart3

}

2:串口数据通过中断接收,接收数据的部分

void UART3_Handler(void) {     char count = _UART3_Threshold_Size;     char i=0;     uint32_t chr ;     if(UART_INTStat(UART3, UART_IT_RX_THR))//接收中断     {         UART_INTClr(UART3, UART_IT_RX_THR);//清除接收中断标志位         while (count--)//FIFO个数接收数据         { if(UART_ReadByte(UART3, &chr) == 0)//接收数据             {                 if(_uart3_count < _UART3_RX_BUFFER_SIZE)                 {                     _uart3_rx_buf[_uart3_count] = chr;                     //接收到的数据存在这个全局变量数组内                     UART_BUF[_uart3_count] = chr;                     _uart3_count++;//数组下标自增                 }             }         } } 接收数据并进行相应的数据显示 /*********************** **数据包格式:头(0xAA)+设备启动状态+间隔时间+重复次数+工作温度+等待速度+包长度+校验和 **设备启动状态:0x0、0x1 **间隔时间:1~30 **重复次数:1~10 **工作温度:10~100 **等待速度:0~100 ***********************/ void Refresh_New_Page(unsigned char *data) { unsigned char verify=0 ,i=0; for ( i = 0; i < data[6]-1; i++)//计算接收到的数据校验和。 { verify += data[i]; } if(data[0] == 0xaa && verify == data[7])//判断帧头(0xAA)和校验和均是和接收数据符合。 { if(data[1]==1)//设备启动 { gt_obj_set_state(switch1, 1); }else if(data[1]==0) { gt_obj_set_state(switch1, 0);//设备关闭 } gt_input_number_set_value(inputNum1, data[2]);//设置间隔时间 gt_input_number_set_value(inputNum2,data[3]);//设置重复次数 gt_input_number_set_value(inputNum3,data[4]);//设置重复次数 gt_slider_set_pos(slider1, data[5]); gt_disp_load_scr(screen_home); } }

3. 下载程序,运行示例

int main(void) SystemInit();//mcu系统初始化 __enable_irq();//使能中断 bsp_uart0_init();//uart0初始化 bsp_uart3_init();//uart3初始化 bsp_sfc_config(1);//存储芯片读取配置 bsp_lcd_rgb_init();//rgb接口屏显配置 systick_init();//systick时钟配置 TP_Init();//时钟I2C初始化 TIMR_Init(TIMR4, TIMR_MODE_TIMER, CyclesPerUs, 1000, 1);//定时器初始化 TIMR_Start(TIMR4);//启动定时器 GT_Font_Init();//字库初始化 gt_init(); gt_ui_init(); while (1) { gt_task_handler();//gt-hmi engine 任务调度 swm_delay_ms(1); // WDT_Feed(WDT); if(uart_status)//uart3串口数据接收完标记 { uart_status=0; Refresh_New_Page(UART_BUF); //处理串口数据将串口数据显示到对应的屏上面。 memset(UART_BUF,0,8); } #if _RUNNING_PRINT if (_cnt >= 1000) { _cnt = 0; GT_LOGI(GT_LOG_TAG_TEST, "tick: %d s&#​34;, gt_tick_get() / 1000); } #endif } }

串口屏初始界面:

串口助手发送如下图命令:

发送命令之后显示的界面:

发送的数据为AA 01 02 01 38 37 08 25 (发送数据格式:头(0xAA)+设备启动状态+间隔时间+重复次数+工作温度+等待速度+包长度+校验和)其中第二个数据“01”代表设备启动状态,我们可以考到设备启动开关被打开,第三个数据”02”代表间隔时间,我们可以看到间隔时间被设置成2min, 第四个数据工作温度“38”是16进制的,换算成10进制就是56,我们可以看到工作温度被改成56。

测试命令:AA 01 02 08 46 54 08 57

我们再次发送测试命令,可以看到其中重复次数和工作温度都被改变了。

总结 您可以尝试自己制作串口屏硬件,或者使用高通GT-HMI开发板/显示模块。我们提供了相应的软硬件资料供您参考。您需要注意的是,制作硬件需要一定的电子技术知识。 如果您是初学者,我们建议您先从使用高通的开发板开始。利用高通GT-HMI开发框架,您也可以快速实现串口屏的显示控制。欢迎分享您的创作经验!