一、概述

  • 开发板: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 驱动,所以这里我们只能根据标准的驱动进行编写了

  1. 驱动函数结构体

       
  2. 注册 LCD 设备

       
  3. LCD 控制函数的实现

       
  4. LCD 驱动功能实现
    剩下的就比较简单了,只需要参考 LCD 提供的案例程序进行更改就好了,主要有实现如下

    • drv_lcd_init: 完成 LCD 的复位、初始化、首次清屏工作
    • drv_lcd_control: 完成 LCD 显示区域的刷新、屏幕参数的返回、亮屏和息屏等工作
      注意:具体实现参考后面的程序源码,相对比较简单,这里就不过多介绍了

四、UGUI 介绍

  1. 介绍
    µGUI 是一个用于嵌入式系统的免费开源图形库。 它独立于平台,可以轻松移植到几乎任何微控制器系统。 只要显示器能够显示图形,μGUI 就不受某种显示技术的限制。 因此,支持LCD、TFT、E-Paper、LED或OLED等显示技术。 整个模块由两个文件组成:ugui.c 和 ugui.h。
    注意:这里的介绍我直接引用了作者的描述

  2. 获取 UGUI
    github:GitHub - xidongxu/ugui: Open source graphics library ugui ported to rtthread

  3. 文件目录

    STM32 + RTThread + UGUI-LMLPHP

  4. 使用介绍

    • 移植: 我们主要实现 ugui_port.c,这里下载时已经提供了案例,所以我只需要在其中进行简单的修改
    • 使用: 使用相对比较简单,直接参考 “µGUI v0.3.pdf” 文档即可,直接没有难度

五、UGUI 移植

  1. 初始化
    直接在 ugui_port.c 文件中使用 INIT_COMPONENT_EXPORT(ugui_port_init) 进行自动初始化,如下图所示:

    STM32 + RTThread + UGUI-LMLPHP

  2. lcd_open 函数
    这里不要做任何更改,从函数中可以看出 LCD 相关的参数获取,如下图所示:

    STM32 + RTThread + UGUI-LMLPHP

  3. lcd_draw_pixel 函数
    主要功能是在缓冲区中写入一个像素点的颜色,如下图所示:

    STM32 + RTThread + UGUI-LMLPHP

  4. ugui_port_thread_entry 函数
    这是线程的入口函数,主要目的是定期将缓冲区的数据写入到 LCD 中,下图所示:

    STM32 + RTThread + UGUI-LMLPHP

注意:从以上步奏可以看出,移植 UGUI 时不需要更改任何参数,只需要在初始化时调用 ugui_port_init 函数即可。

六、程序源码

drv_lcd_st7735s.h

 

drv_lcd_st7735s.c

 

 

08-25 23:27