LVGL移植

ops/2024/10/20 16:06:23/

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


http://www.ppmy.cn/ops/27249.html

相关文章

Spring 处理 HTTP 请求参数注解

RequestParam、RequestBody、RequestPart 对比 请求体格式: RequestParam:application/x-www-form-urlencodedRequestBody:application/json、application/xmlRequestPart:multipart/form-data 入参类型: RequestP…

【yolov8yolov5驾驶员抽烟-打电话-喝水-吃东西检测】

YOLO算法DMS驾驶员抽烟-打电话-喝水-吃东西检测数据集 YOLOv8和YOLOv5是深度学习中用于目标检测的先进算法,它们在实时性和准确性方面表现出色,适用于各种视频监控和图像处理应用,包括驾驶员行为监测。这些算法通过单次前向传播即可预测图像…

探索潜力:中心化交易所平台币的对比分析

核心观点 平台币在过去一年里表现差异显著: 在过去的一年里,只有少数几个平台币如BMX、BGB和MX的涨幅超过了100%。相比之下,由于市值较高,BNB和OKB的涨幅相对较低。 回购和销毁机制在平台币价值中起决定性作用: 像M…

使用Nuxt3框架搭建基础项目

Nuxt3安装 基础配置: Node.js** - v18.0.0版本以上 , 可以结合fnm工具切换node版本 安装nuxt3命令 打开vscode或者控制台去到项目文件夹输入: npx nuxi@latest init <project-name> 国内执行这行代码,即使科学上网也会有问题 ⚠️ 安装Nuxt3报错 安装过程的报错 Fa…

Python 操作PDF图片 – 添加、替换、删除PDF中的图片

PDF文件中的图片可以丰富文档内容&#xff0c;提升用户的阅读体验。除了在PDF中添加图片外&#xff0c;有时也需要替换或删除其中的图片&#xff0c;以改进视觉效果或更新信息。文本将提供以下三个示例&#xff0c;介绍如何使用Python 操作PDF文件中的图片&#xff1a; 目录 …

【35分钟掌握金融风控策略10】风控策略部署2

目录 策略部署 决策引擎系统简介 基于决策引擎进行策略部署 策略部署结果验证 知识点补充 测试验证 回溯比对 策略部署 策略主要部署在决策引擎上进行风险决策&#xff0c;接下来分别介绍决策引擎系统&#xff0c;以及基于决策引擎进行策略部署的相关内容。 决策引擎系…

SpringCloud系列(13)--Eureka服务名称修改和服务IP显示

前言&#xff1a;在上一章节中我们把服务提供者做成了集群&#xff0c;而本章节则是一些关于服务信息的配置&#xff0c;这部分知识对集群整体影响不大&#xff0c;不过最好还是掌握&#xff0c;毕竟万一有用到的地方呢 1、修改服务的名称 有时候我们想要修改服务的名称&#…

【前端】VUE项目创建

在所需文件夹中打开cmd命令行窗口&#xff0c;输入vue ui 进入web可视化界面选择创建新项目 根据需求依次完成下列选择&#xff0c;下列是参考配置&#xff0c;完成后点击创建项目即可 最终显示完成