LVGL V8.3移植STM32使用clion+踩坑记录
JukingRC-梦三生清羽
2024年02月24日 21:01
收录于文集
共1篇
lvgl技术分享

一:准备事项:

  • 配置好clion开发STM32环境并新建一个STM32工程,同时加入LCD驱动,使屏幕能正常显示

  • 下载LVGL V8.1官方源码 下载地址:https://github.com/lvgl/lvgl/tree/release/v8.3

二:移植文件相关文件

1.将源码中下图四个文件复制到一个文件夹中,并放到前面新建好的STM32工程中,如图:(这里将四个文件夹复制到了名为LVGL_8.3文件夹中并放置在工程目录下的HARDWARE文件夹中)

2.修改lv_conf_template.h文件名为lv_conf.h,并将examples/porting目录下文件名中template删除(也可以不删除,但要与引入的头文件名称一致),如下图:

3.用clion打开代码工程,将图中文件置1使能,这里只演示显示功能,输入及文件功能不使用,所以只将显示接口两个文件使能

4.更改文件名称

5.在cmake中添加头文件和源文件路径

6.在配置头文件中加入如下代码,设置屏幕尺寸

#define MY_DISP_HOR_RES 240 #define MY_DISP_VER_RES 135

7.设置使用单缓存buffer接收,将其余两个注释掉

注释掉后编译工程无报错,进行下一步

8.接下来进行LCD屏幕绘制函数和lvgl接口的设置,这是lcd与lvgl之间链接的桥梁

这里我使用中景园1.14寸屏幕,使用画点函数:void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color);注意传参时不能按照上面一行示例直接传入结构体的值,将结构体中的color_p->full变量传进去

9.接下来在main.c文件中引入相关头文件,以及LVGL初始化和LVGL显示初始化函数。

#include "lvgl.h" #include "lv_port_disp.h"

lv_init();

lv_port_disp_init();

如下图:

10.加入初始化函数之后,还需要加入心跳函数lv_tick_inc(1);,提供一个基于毫秒(ms) 的 Tick 维持 LVGL 的心跳,应当放入1ms定时器中,这里演示方便放至主函数中+1ms延时完成,同时还要加入事务处理器函数lv_task_handler();,LVGL 内部的所有事务都是通过这个接口来处理的。如下图:

11:到这里移植工作基本完成,跑一个演示例程

在main.c文件中引入示例#include "lv_examples.h"头文件

打开examples\widgets\meter\lv_example_meter_1.c文件,(演示例程可以随便选,这里选一个显示仪表示例)调用示例函数,编译下载,可以看到效果


踩坑记录

在刚开始移植时下载了最新的v9.0.1版本,在移植后仅加入lvgl和显示初始化函数之后,RAM占用达到了257K,时STM32F407VET6 RAM的2倍,尝试减小lvgl的动态内存分配,减小之后占用任然高达225K。

懒得折腾,索性下载v8.3版本,移植之后仅占44.24%