【开源串口屏方案】五步教你设计串口屏,5分钟快速上手

本文详细介绍串口屏原理、设计方法、实现步骤,给出完整代码实例,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", gt_tick_get() / 1000);

}

#endif

}

}

4、程序下载到高通GTC-480272TFT43XP 显示模块效果:

串口屏初始界面:

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

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

 发送的数据为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开发框架,您也可以快速实现串口屏的显示控制。欢迎分享您的创作经验!

### 回答1: freertos和freemodbus是常用的嵌入式操作系统和Modbus通信协议栈,在STM32F407微控制器上进行移植可以实现嵌入式系统的实时任务调度和Modbus通信功能。以下是移植的简单程: 1. 准备工作: - 下载安装Keil5开发工具,下载安装STM32CubeMX软件; - 下载FreeRTOS和FreeModbus的源代码; - 准备一块STM32F407开发板。 2. 创建Keil项目: - 打开STM32CubeMX软件,选择STM32F407芯片型号; - 配置时钟设置、GPIO引脚配置、串口通信等参数; - 生成代码并打开Keil5,导入生成的工程代码; - 打开工程设置,设置编译选项。 3. 移植FreeRTOS: - 将FreeRTOS源代码中的"Source"文件夹拷贝到Keil工程目录下; - 修改FreeRTOSConfig.h文件,根据实际需求配置操作系统的参数,如任务栈大小、定时器频率等; - 在main.c中添加任务函数,参考FreeRTOS示例代码实现; - 在main函数中调用vTaskStartScheduler()启动任务调度器。 4. 移植FreeModbus: - 将FreeModbus源代码中的"Source"文件夹拷贝到Keil工程目录下; - 在main.c中添加Modbus从机或主机的初始化代码; - 配置Modbus通信参数,如波特率、数据位等; - 实现Modbus从机或主机的读写寄存器函数,根据项目需求自行编写; - 在main函数中调用eMBInit()和eMBEnable()初始化和启动Modbus协议栈。 5. 编译、下载和调试: - 编译工程代码,解决编译错误; - 使用JTAG或SWD方式下载代码到STM32F407开发板; - 连接串口调试工具,查看FreeModbus的通信日志,验证通信功能。 以上是将FreeRTOS和FreeModbus移植到STM32F407微控制器的简单程。在移植过程中需要熟悉Keil开发环境、STM32CubeMX软件和FreeRTOS、FreeModbus的源代码结构与配置。根据具体项目需求,可能需要对FreeRTOS和FreeModbus的源代码进行一定的修改和适配。 ### 回答2: 对于freertos和freemodbus移植到stm32f407的傻瓜程(keil5),以下是一个简单的300字中文回答: freertos是一个开源的实时操作系统,而freemodbus是modbus通信协议的实现。将它们移植到stm32f407微控制器上可以提供一个强大的嵌入式系统平台。 首先,你需要下载和安装keil5开发环境,并确保它与stm32f407兼容。然后,你需要下载freertos和freemodbus的最新版本。 接下来,打开keil5,并创建一个新的工程。选择stm32f407的正确型号,并配置相关的引脚和时钟。将freertos和freemodbus的源码文件添加到工程中。 在keil5的工程设置中,确保编译器选项正确地配置。你可能需要调整编译选项以适应stm32f407和freertos、freemodbus的要求。 在主函数中,初始化freertos和freemodbus。首先初始化freertos的任务、队列和定时器等组件。然后,初始化freemodbus的串口和modbus从站功能。 在freertos的任务中,你可以定义不同的任务,比如一个任务用于处理modbus通信,另外一个任务用于处理其他的逻辑功能。 在freemodbus的回调函数中,你可以处理modbus请求和应答。根据你的需求和设备的功能,你可以实现读和写保持寄存器、离散输入和线圈等modbus功能。 当所有的配置和代码都准备好后,编译并烧录代码到stm32f407。确保连接正确的调试器和目标板,并运行你的程序。在调试过程中,你可以使用调试工具来监视任务、队列和任务时间等信息,以便在需要的时候进行调试和优化。 以上是一个简单的300字回答,介绍了将freertos和freemodbus移植到stm32f407傻瓜程(keil5)的步骤和注意事项。希望对你有所帮助! ### 回答3: 所谓傻瓜程,是一种简单易懂的学材料,旨在帮助初学者快速上手并完成相应的任务。下面针对这个主题给出一个适用于300字的回答: 《FreeRTOS和FreeModbus移植到STM32F407傻瓜程(Keil5).pdf》是一个关于如何在STM32F407上移植FreeRTOS和FreeModbus的简单程。STM32F407是一种常用的微控制器,而FreeRTOS和FreeModbus是常见的嵌入式操作系统和通信协议栈。通过将它们移植到STM32F407上,可以为您的嵌入式系统提供更强大的功能。 该程使用Keil5作为开发工具,并提供了逐步的指导,让初学者能够轻松地完成移植任务。在程中,作者首先介绍了FreeRTOS和FreeModbus的基本概念和作用。然后,他详细说明了如何在Keil5中设置项目,并设置适当的编译选项和链接脚本。接下来,他提供了一些示例代码,让读者了解如何使用FreeRTOS和FreeModbus的API函数。最后,作者演示了如何在STM32F407上运行和验证移植后的系统。 该程采用了简单明了的语言和图解,帮助读者理解移植过程中的各个步骤和概念。它还提供了一些常见问题和解决方案,以帮助读者克服可能遇到的难点和困惑。 总之,《FreeRTOS和FreeModbus移植到STM32F407傻瓜程(Keil5).pdf》提供了一个简单易懂的指南,帮助初学者将FreeRTOS和FreeModbus移植到STM32F407上。通过学习和实践,读者可以掌握移植的基本原理和技巧,进一步深入学习和应用这两个重要的嵌入式开源软件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值