欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32笔记之 GUI(LittlevGL移植)

程序员文章站 2022-04-02 07:54:34
...

写在前面:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。

 

目录

一、LittlevGL GUI

二、文件提取

三、移植操作及添加接口

四、执行处理

五、Demo运行及配置


 

一、LittlevGL GUI

LittlevGL是一个免费的开放源代码图形库,它提供创建嵌入式GUI所需的一切,它具有易于使用的图形元素,精美的视觉效果和低内存占用;功能强大且易于使用的嵌入式GUI,具有许多小部件,高级视觉效果(不透明度,抗锯齿,动画)和低内存要求(16K RAM,64K Flash)

它的官网:https://littlevgl.com/

手册:https://docs.littlevgl.com/zh-CN/html/index.html

项目开源地址:https://github.com/littlevgl/lvgl

其他什么的,这里就不多解释了,上面链接里的内容都写的明明白白的

 

二、文件提取

首先,我们先 git clone,把它的提供的项目文件拉取下来,我这里是用的是 6.1.2发行版,打开文件夹可以看到如下文件:

STM32笔记之 GUI(LittlevGL移植)

然而我们真正需要的只是框选的文件,所以我们只需提取那几个文件就好了

 

如果你想要试一下官方提供的 Demo,可以再 git clone一个例子项目,链接:https://github.com/littlevgl/lv_examples

然后把下图框选的文件提取出来

STM32笔记之 GUI(LittlevGL移植)

STM32笔记之 GUI(LittlevGL移植)

 

三、移植操作及添加接口

文件提取完成后,并入到我们的工程里面(PS:这里截的是改好的文件)

STM32笔记之 GUI(LittlevGL移植)

lvgl/src文件太多,就不展开截图了,记住,src里的文件需要全部都添加进去,因为它包含了 lvgl的所有组件的功能

接着我们先打开管理整个 lvgl的配置文件,按照它描述修改就好了

STM32笔记之 GUI(LittlevGL移植)

从上图可以看到,我已经把它改成了 lv_conf.h了,还记得上面说的提取的 lv_conf_template.h文件吗?对滴,就是把它重命名了,另外有一些也是一样的道理,官方写的还是很明白的,实在不知道怎么操作,那就再翻手册呗;还有就是把需要用到的文件开头部分的 #if 0都修改为 #if 1

好了,当你琢磨完配置文件后,那么就来修改一下接口文件吧,就是上图的 lvgl/port的那三个文件,其实看名字就知道了

文件 说明
lv_port_disp 配置显示器的接口功能的文件
lv_port_indev 配置触摸等输入设备的接口功能的文件
lv_port_fs 配置 FatFs文件系统的接口功能的文件

在这里,接入 FatFs文件系统的操作就不说,只讲另外的那两个,因为这两个才是最重要的

1、先来分析 lv_port_disp.c文件

  • lv_port_disp_init函数

STM32笔记之 GUI(LittlevGL移植)

这里要做的主要是选择我们想要提供给 lvgl操作的显示缓存空间

STM32笔记之 GUI(LittlevGL移植)

设置 lvgl使用的显示尺寸,这里直接等于 lv_conf.h的宏就好了

  • disp_init函数

STM32笔记之 GUI(LittlevGL移植)

这里添加你用的显示器初始化函数就完事了

  • disp_flush函数

STM32笔记之 GUI(LittlevGL移植)

这里也是按照它说的,添加底层描点函数就行了,当然,保险一点,我们可以加上一些检测功能

2、再者分析 lv_port_indev.c文件

  • lv_port_indev_init函数

这里面有包含很多输入设备的接口函数,从它注释可以知道

    /* Here you will find example implementation of input devices supported by LittelvGL:
     *  - Touchpad
     *  - Mouse (with cursor support)
     *  - Keypad (supports GUI usage only with key)
     *  - Encoder (supports GUI usage only with: left, right, push)
     *  - Button (external buttons to press points on the screen)
     *
     *  The `..._read()` function are only examples.
     *  You should shape them according to your hardware
     */

但是我们目前只需处理触摸的接口就行,其他的屏蔽掉

  • touchpad_init函数

STM32笔记之 GUI(LittlevGL移植)

上面那个函数初始化的时候会调用到这里,而这里是用来存放我们添加的触摸底层接口

  • touchpad_read函数

是会被库调用来读取 touchpad信息的,不用改动它,因为它留有接口出来,就是下面的函数

  • touchpad_is_pressed函数

STM32笔记之 GUI(LittlevGL移植)

用来获取触摸状态的接口

  • touchpad_get_xy函数

STM32笔记之 GUI(LittlevGL移植)

顾名思义,用来获取 xy坐标的

 

四、执行处理

在写好接口后,要让 lvgl执行起来其实很简单

1、初始化

STM32笔记之 GUI(LittlevGL移植)

初始化只需要添加这几个接口

2、lvgl时基

STM32笔记之 GUI(LittlevGL移植)

lvgl它需要一个时基来维持,在这里我是用 Systick时钟来为其提供需要,当然你也可以用其他定时器;传入参数是你对应所做的时基计数,单位是 ms

3、执行处理

STM32笔记之 GUI(LittlevGL移植)

我们需要周期执行 lv_task_handler这个函数,因为 lvgl的刷新靠的就是这个函数

 

五、Demo运行及配置

当你把以上的配置都弄好之后,那么你可以运行一下官方提供的 demo.c文件的例子,添加 demo_create函数

STM32笔记之 GUI(LittlevGL移植)

其余的都不用怎么改动

然后在 lv_ex_conf.h里面,打开你想要用的操作

STM32笔记之 GUI(LittlevGL移植)

效果:

STM32笔记之 GUI(LittlevGL移植)

还有其他效果,具体可以自己去摸索