一、概述
- 开发板:STM32F103C8T6
- 显示器:ST7735S
- RT-Thread:5.0.0
玩过 GUI 的小伙伴都知道,界面的显示是一个个像素点组合起来的,那么直接构建出来炫酷的 GUI 还是相对比较困难的,所以我们一般都会使用一些 GUI 库来实现,比如 LVGL、QT、UGUI等,这样对于驱动开发的人员来说就相对比较简单了,
图形库应用的核心思想只需要提供一帧的缓冲区,我们只需要不断的将缓冲区的数据写入到 LCD 中即可,而缓冲区的内容由图形库实现,需要注意的是这个缓冲的创建方式,有的图形库会自己创建缓冲区,我们只需要负责刷新 LCD 的显示即可,而有的图形库是由驱动提供缓冲区,图形库负责写入。
二、RT-Thread 移植
移植 RT-Thread 不是此文章的重点,可以参考一下我之前的笔记,或者直接使用 RT-Thread Studio、STM32CubeMX等工具直接生成,这里我就不过多介绍了
三、LCD 驱动
使用过 RT-Thread 的小伙伴,都知道 RT-Thread 目前还不能直接使用工具生成我们想要的 LCD 驱动,所以这里我们只能根据标准的驱动进行编写了
-
驱动函数结构体
-
注册 LCD 设备
-
LCD 控制函数的实现
-
LCD 驱动功能实现
剩下的就比较简单了,只需要参考 LCD 提供的案例程序进行更改就好了,主要有实现如下- drv_lcd_init: 完成 LCD 的复位、初始化、首次清屏工作
- drv_lcd_control: 完成 LCD 显示区域的刷新、屏幕参数的返回、亮屏和息屏等工作
注意:具体实现参考后面的程序源码,相对比较简单,这里就不过多介绍了
四、UGUI 介绍
-
介绍
µGUI 是一个用于嵌入式系统的免费开源图形库。 它独立于平台,可以轻松移植到几乎任何微控制器系统。 只要显示器能够显示图形,μGUI 就不受某种显示技术的限制。 因此,支持LCD、TFT、E-Paper、LED或OLED等显示技术。 整个模块由两个文件组成:ugui.c 和 ugui.h。
注意:这里的介绍我直接引用了作者的描述 -
获取 UGUI
github:GitHub - xidongxu/ugui: Open source graphics library ugui ported to rtthread -
文件目录
-
使用介绍
- 移植: 我们主要实现 ugui_port.c,这里下载时已经提供了案例,所以我只需要在其中进行简单的修改
- 使用: 使用相对比较简单,直接参考 “µGUI v0.3.pdf” 文档即可,直接没有难度
五、UGUI 移植
-
初始化
直接在 ugui_port.c 文件中使用INIT_COMPONENT_EXPORT(ugui_port_init)
进行自动初始化,如下图所示: -
lcd_open 函数
这里不要做任何更改,从函数中可以看出 LCD 相关的参数获取,如下图所示: -
lcd_draw_pixel 函数
主要功能是在缓冲区中写入一个像素点的颜色,如下图所示: -
ugui_port_thread_entry 函数
这是线程的入口函数,主要目的是定期将缓冲区的数据写入到 LCD 中,下图所示:
注意:从以上步奏可以看出,移植 UGUI 时不需要更改任何参数,只需要在初始化时调用 ugui_port_init
函数即可。
六、程序源码
drv_lcd_st7735s.h
drv_lcd_st7735s.c