LVGL移植

Lvgl介绍

LVGL是一个开源的图形库,专为嵌入式系统设计。它提供了丰富的图形元素和功能,可以帮助开发者快速构建现代化的用户界面。LVGL具有跨平台的特性,支持多种操作系统和硬件平台,包括ARM Cortex-M,ESP32,Linux等。LVGL的特点包括高性能、低内存占用、可扩展性强等,使其成为嵌入式图形界面开发的理想选择。LVGL提供了丰富的文档和示例,使开发者可以快速上手并轻松定制自己的界面。

Lvgl官网:https://lvgl.io/

Lvgl官方文档:https://docs.lvgl.io/master/index.html

Lvgl源码网址:https://github.com/lvgl/lvgl

Lvgl移植到STM 32

下载LVGL源码

我们使用的是Lvgl7.11版本,因此在Github上找到对应版本源码下载:https://github.com/lvgl/lvgl/tree/v7.11.0

其中lvgl/src文件夹内存放的是LVGL的核心源码,lvgl/examples/porting文件夹内存放的是lvgl与底层的接口函数,这些函数需要我们根据自己的项目进行修改。

将必要文件复制到工程目录

1、在个人的工程目录下创建一个名为Lvgl的文件夹,并将lvgl/src目录复制到Lvgl目录下,将lvgl/examples/porting文件夹复制到Lvgl目录下,同时将lvgl/lvgl.h文件以及lvgl/lv_cofnf_template.h文件复制到Lvgl目录下。如下图所示:

2、将lv_conf_template.h文件更名为lv_conf.h,如下图所示:

3、修改porting目录下所需要的文件名字,我们只使用了屏幕的显示功能,因此我们只修改显示接口的文件名字,将lv_port_disp_template.c/.h更名为lv_port_disp.c/.h如下图所示:

4、在Lvgl目录下再创建一个app目录,用于存放我们后期自己写的应用层界面代码,具体操作如下图所示:

5、打开工程,在工程目录下新建三个分组,分别为Lvgl/app、Lvgl/porting、Lvgl/src三个目录,具体操作如下图所示:

6、添加文件到工程目录中,porting目录下只添加lv_port_disp.c,以及Lvgl目录下的lv_conf.h文件,这两个文件后面需要修改。

在src目录下,添加Lvgl/src目录下除去gpu文件夹外的所有文件夹内的.c文件。

7、配置头文件路径,把Lvgl文件夹下所有包含h文件的路径,在工程属性中进行配置,具体操作如下图:

修改配置文件

1、打开lv_port_disp.c/.h文件,修改如下内容: -- 4处修改

2、修改lv_conf.h文件如下图所示,修改后编译代码,这个时候代码就没有错误了。 -- 1处更改

3、接下来适配屏幕接口到lvgl上,先修改lv_conf.h内的宏定义,通过它可以设置库的基本行为,裁剪不需要模块和功能,在编译时调整内存缓冲区的大小等等,我们先修改一些必须修改的定义,后期的功能我们在具体项目中再做裁剪。

这个根据自己使用的屏幕大小,我们使用的屏幕是320*240。

4、继续适配屏幕接口到lvgl上、修改lv_port_disp.c文件中的显示接口函数,用于适配我们的屏幕与lvgl,包含lcd屏幕显示的头文件。

修改屏幕显示初始化函数lv_port_disp_init,我们用方法一显示,同时修改屏幕的大小.

5、修改disp_init函数,该函数一般将我们的屏幕初始化放进去,也可以在硬件层初始化屏幕,这里就可以不写底层屏幕的初始化。

6、修改disp_flush函数,该函数是lvgl绘制界面的关键函数,是用于绘制界面的最基本的函数,也是lvgl与底层屏幕的绘制适配接口函数。

初始化LVGL

使用 lvgl 图形库之前,我们还必须初始化 lvlg 以及相关其他组件。

1、调用 lv_init() 初始化 lvgl 库、初始化驱动程序、在 LVGL 中注册显示和输入设备驱动程序,在main.c 中包含lvgl.h、lv_port_disp.h,并在硬件初始化上添加lv_init()函数以及lv_port_disp_init()函数。

2、在中断中每隔 x毫秒 调用 lv_tick_inc(x) 用以告知 lvgl 经过的时间;我们如果使用的是裸机开发,那么直接将这个函数放到硬件定时器的1ms中断服务函数内,如果我们使用的是操作系统,那么我们可以放到系统基础节拍的钩子函数内。

3、每隔 x毫秒 定期调用 lv_task_handler() 用以处理与 lvgl 相关的任务。如果是裸机开发,那么我们可以在while(1)中做一个时间点,1ms或者10ms的调用一次这个函数,如果是使用的操作系统,那么我们可以创建一个任务来周期性的执行它。

4、到此我们的移植算是完成,为了验证我们的lvgl是否能使用,我们可以去到官网或者找一个lvgl的小例程测试是否能正常显示。

相关推荐
czhc11400756633 分钟前
Linux 76 rsync
linux·运维·python
蓝易云1 小时前
Qt框架中connect()方法的ConnectionType参数使用说明 点击改变文章字体大小
linux·前端·后端
花落已飘2 小时前
多线程 vs 异步
linux·网络·系统架构
PanZonghui2 小时前
Centos项目部署之Nginx部署项目
linux·nginx
码出钞能力3 小时前
linux内核模块的查看
linux·运维·服务器
星辰云-3 小时前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容
聽雨2373 小时前
02每日简报20250704
linux·科技·金融·生活·社交电子·娱乐·媒体
Maki Winster4 小时前
Peek-Ubuntu上Gif录制工具-24.04LTS可装
linux·ubuntu·peek
Maki Winster5 小时前
在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
linux·运维·ubuntu
守望时空335 小时前
Linux下KDE桌面创建自定义右键菜单
linux