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移植到STM32

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

相关推荐

  1. lvgl移植以及使用记录(1)

    2024-04-26 03:26:02       49 阅读
  2. <span style='color:red;'>LVGL</span>:

    LVGL

    2024-04-26 03:26:02      27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 03:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 03:26:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 03:26:02       82 阅读
  4. Python语言-面向对象

    2024-04-26 03:26:02       91 阅读

热门阅读

  1. Linux下文件内容更新了文件夹时间戳却没变?

    2024-04-26 03:26:02       34 阅读
  2. Spring中事务的几种失效场景

    2024-04-26 03:26:02       30 阅读
  3. 如何看待AIGC技术?【模板】

    2024-04-26 03:26:02       31 阅读
  4. json字符串转json对象三种方式

    2024-04-26 03:26:02       34 阅读
  5. 期货开户利润是风险的产物

    2024-04-26 03:26:02       28 阅读
  6. C# 通过阿里云 API 实现企业营业执照OCR识别

    2024-04-26 03:26:02       32 阅读
  7. 磁盘分区以及MBR与GPT

    2024-04-26 03:26:02       36 阅读
  8. Linux:web服务基于IP和域名部署

    2024-04-26 03:26:02       32 阅读