移植 LVGL 8.3 到 STM32F4

只涉及如何移植显示驱动,项目的配置和生成不涉及,参考此篇移植LVGL之前确保屏幕驱动是可用的。

项目配置

MCU:STM32F411CEU6
屏幕:1.69寸 ST7789 240*280 LCD
LVGL:8.3.11
开发环境:MacOS + STM32CubeMX + Clion + OpenOCD

LVGL 8.3

下载LVGL 8.3源码

LVGL 8.3 开源地址:https://github.com/lvgl/lvgl/tree/release/v8.3

下载 ZIP 包

LVGL 8.3

Github访问不上的可以这个链接下载:https://doufu520.lanzouu.com/iLnj32uyrjwf 密码:3g41

裁剪LVGL 8.3

解压后的目录结构如下

LVGL 8.3

源代码里很多不相关的东西,要进行裁剪。对LVGL进行裁剪,只需要保留demos examples src lv_conf_template.h lvgl.h

LVGL 8.3

其余文件删除,删除后目录结构应如下

裁剪后的LVGL 8.3

再进一步裁剪,examples 文件夹里只需要 porting,最终裁剪目录结构如下

最终裁剪

移植

SPI 配置参考

项目中需要用到 DMA,需要给 SPI 接口的 TX 配置 DMA 通道。
SPI 配置参考
SPI 配置参考
SPI 配置参考
SPI 配置参考

添加到 STM32 项目

在STM32项目下创建 LVGL 文件夹,将刚才裁剪好的源代码拷贝进工程中。

加入STM32项目中

配置 LVGL

重命名文件

这步可以省略,重命名只为好看。

LVGL的文件重命名,重命名完应如下。

重命名

修改 LVGL 代码

lv_conf.h 修改

启用该头文件。

lv_conf.h

lv_port_disp.h 修改

启用该头文件。

lv_port_disp.h

lv_port_disp_init 函数修改

该函数位于 lv_port_disp.c 中。
MY_DISP_HOR_RESMY_DISP_VER_RES改成自己的屏幕尺寸。

lv_port_disp.c

lv_port_disp_init 函数中的变量 static lv_disp_drv_t disp_drv; 声明为全局变量,为配合 HAL_SPI_TxCpltCallback 回调函数使用。

lv_port_disp_init

使用单缓冲,也可以配置双缓冲,实际测试没很大提升,应该是没配置对吧。

lv_port_disp_init

disp_flush 函数修改

该函数位于 lv_port_disp.c 中。

这段代码是 LVGL 显示驱动移植中的核心部分,负责将 LVGL 渲染好的像素数据发送到屏幕上显示。

使用 STM32SPI 接口和 DMA 功能,disp_flush 函数由 LVGL 调用,数据通过 DMA 传输完成后,HAL_SPI_TxCpltCallback 回调函数中调用的 lv_disp_flush_ready 通知 LVGL 刷新已经完成。

disp_flush

部分代码

初始化代码
ST7789_Init();
lv_init();
lv_port_disp_init();
LVGL 心跳

使用TIM定时器设定1ms中断,调用 lv_tick_inc(1)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
	// LVGL,pcs 100 ,arr 1000 ,100000,100 000 000 / 100000,1000Hz,1ms
	if (htim->Instance == TIM11) {
		lv_tick_inc(1);
	}
LVGL 事务处理

while中调用 lv_timer_handler()

while (1)
  {
    lv_timer_handler();
    HAL_Delay(5);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

最终效果

启用Demo

启用Demo

调用的代码

ST7789_Init();
lv_init();
lv_port_disp_init();
lv_demo_benchmark();

效果

能跑到30多FPS,应该还能再优化。

:)

效果
效果

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值