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的小例程测试是否能正常显示。