打印
[STM32U5]

【NUCLEO-U5A5ZJ-Q测评】7.基于STM32U5移植lvgl

[复制链接]
1433|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Tristan_C 于 2023-12-4 11:01 编辑

#申请原创#
基于STM32U5移植lvgl

LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入式系统图形库,对硬件的要求比较低,可以较为流畅的运行在单片机上。不依赖特定的硬件平台,可以在任何显示屏上运行,并且完全开源,对按钮,触摸,编码器旋钮等支持的非常到位。
开源代码可以官网下载,可以下到当前最新的8.3.10版本
HYPERLINK "https://github.com/lvgl/lvgl/tree/release/v8.3"

移植使用时,主要用到下面框起来的四个文件或者文件夹

他们的主要用的内容和作用为:
examples
一些演示例程和可以用到的接口函数
src
LVGL的源码,最重要的内容
lv_conf_template.h
LVGL配置文件,用来裁剪控制LVGL的功能,通常重命名为lv_conf.h
lvgl.h
LVGL用到的一些头文件的声明
下面就在代码文件夹新建lvgl文件夹,用于放上面四个文件和文件夹

将他们拷贝进去

接下来需要看一下keil的配置,因为LVGL是基于C99编写的,所以keil编译时一定要选择C99模式编译,不选择的话我的工程默认使用的是C11模式,所以有可能会出比较多的编译错误


然后给项目添加下面的lvgl相关的文件夹

然后添加user_lvgl_port文件夹的相关文件,这里只添加显示的lv_port_disp_template,因为没有输入和文件系统,因此另外两个实际上添加了后面也没用用上。

接下来添加中断的user_lvgl源代码,也就是添加lvgl下面src文件夹的下列文件夹中的所有文件,包括extra(实际上可能不用,但为了后续编译免去麻烦全都加上)

添加头文件路径

添加LV_CONF_INCLUDE_SIMPLE到编译器预处理中,以使用lv_conf.h文件

修改头文件lv_port_disp_templ.h的预编译宏定义打开功能

修改头文件lv_port_disp_templ.c的预编译宏定义打开功能

添加液晶底层驱动的头文件,这里使用的是ILI9431

接下来修改这个lv_port_disp_init中的disp_init函数内容

在这里,将我们的LCD初始化的部分放到这里,当然,也可以放在别处,也行,但是必须要在确保在lvgl初始化之前调用,这里我们就不在这里做初始化,而分开操作。

下面选择显存方式,代码提供了3中方式,这里选择方式1,因此下面这两个Example测试代码通过预编译注释掉

修改disp_flush函数的填充功能函数为LCD驱动(ILI9431)的描点函数

将lv_conf_template.h修改为lv_conf.h

并修改里面的宏定义预编译,将其功能打开

在文件末尾增加屏幕大小定义

下面这两个宏在调试阶段也可以打开,这是用来在屏幕上显示帧数和MCU占用、内存占用的。

main函数增加头文件

还需要一个在嘀嗒定时器里加一个定时函数进行刷新(这里也注意添加头文件)

在主函数中对lvgl先进性初始化,要注意,前面有提到,ILI9431初始化需要在lvgl初始化之前进行

然后增加两个显示label标签,显示ST和21ic的一些信息

并在main函数中增加一个在lv_port_disp_init函数之后调用

主循环中,增加lvgl的处理函数lv_task_handler以及延时

其中 LV_DISP_DEF_REFR_PERIOD 为其刷新时间周期,在lv_conf.h文件中定义,该参数决定帧率。

编译下载运行



从图中看起来,刷新率配置还不算高,刷新太慢了,但CPU占用率已经相当高,这主要是因为屏幕驱动方式以及代码本身优化程度,造成了MCU的占用率不理想,待后续进行更多的优化。
显示效果见视频


使用特权

评论回复
沙发
mmbs| | 2023-12-7 21:59 | 只看该作者
需要编写代码来创建和操作LVGL的界面元素,如按钮、文本框、列表等。

使用特权

评论回复
板凳
mollylawrence| | 2023-12-8 10:30 | 只看该作者
对硬件的要求比较低,可以较为流畅的运行在单片机上。

使用特权

评论回复
地板
plsbackup| | 2023-12-8 16:09 | 只看该作者
可以在LVGL的官方网站上下载到当前最新的版本。

使用特权

评论回复
5
dspmana| | 2023-12-8 20:54 | 只看该作者
需要修改LVGL源代码中的相关函数,如lv_disp_drv_t等。

使用特权

评论回复
6
gygp| | 2023-12-9 14:20 | 只看该作者
注意不要一次性加载过多的界面元素,以免占用过多的内存和CPU资源。

使用特权

评论回复
7
sheflynn| | 2023-12-9 16:10 | 只看该作者
LVGL可以在MCU CLOCK RATE ≥ 15Mhz,Flash/ROM ≥ 180kB,RAM等性能以上的单片机上正常运行

使用特权

评论回复
8
everyrobin| | 2023-12-9 22:46 | 只看该作者
LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入式系统图形库

使用特权

评论回复
9
sesefadou| | 2023-12-10 17:54 | 只看该作者
在移植过程中需要确保硬件平台和驱动接口与LVGL的要求一致。

使用特权

评论回复
10
51xlf| | 2023-12-12 11:28 | 只看该作者
为LVGL分配足够的内存空间。              

使用特权

评论回复
11
HonestQiao| | 2023-12-12 14:06 | 只看该作者
我分享的这篇 【NUCLEO-U5A5ZJ-Q测评】驱动DFRobot高清彩屏使用lvgl显示动态仪表盘 ,是运行在NUCLEO-U5A5ZJ-Q的Zephyr系统上的LVGL实例,丝滑流畅,效果一级棒!!!

可以参考一下!

使用特权

评论回复
12
alvpeg| | 2023-12-12 15:11 | 只看该作者
需要对lvconf.h文件进行配置,以选择你需要的lvgl组件和功能。

使用特权

评论回复
13
Tristan_C|  楼主 | 2023-12-12 15:23 | 只看该作者
HonestQiao 发表于 2023-12-12 14:06
我分享的这篇 【NUCLEO-U5A5ZJ-Q测评】驱动DFRobot高清彩屏使用lvgl显示动态仪表盘 ,是运行在NUCLEO-U5A5Z ...

好的,乔帮主,多谢提点。我这个总感觉哪里没弄对,抽时间参考你的大作再看看哪里可以优化的。第一次玩ui,还不太会,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

113

帖子

0

粉丝