0
点赞
收藏
分享

微信扫一扫

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)


一、移植前的准备

1. 裸机工程

  • ​​STM32CubeMX | 35-使用硬件FSMC驱动TFT-LCD屏幕(MCU屏,NT35510控制器)​​

2. lvgl源码

  • ​​https://github.com/lvgl/lvgl​​

下载最新发布的 ​8.2.0​ 版本:​​​​https://github.com/lvgl/lvgl/releases/tag/v8.2.0​​​​

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化

内容如下:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_#include_02

lvgl源码在 src 目录下:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_03

二、移植lvgl

1. 复制lvgl源码到工程中(需要修改)


  • src:lvgl源码
  • examples\porting:lvgl移植文件模板代码
  • lv_conf_template.h:配置文件模板代码
  • lvgl.h:lvgl头文件

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_04

复制过来后,将配置文件​​lv_conf_template.h​​重命名为​​lv_conf.h​​:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_#include_05

porting下的文件也进行重命名,去掉​​_template​​:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_06

2. 添加lvgl到工程中

(1)添加lvgl源码

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_07

添加draw文件夹之下的代码,同时添加其sw文件夹下的文件:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_08

添加extra文件夹下的​所有文件​:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_09

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_10

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_11

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_12

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_13

(2)添加lvgl移植代码

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_14

(3)添加lvgl配置文件(仅为了方便编辑)

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_15

(4)添加lvgl demo/widgets 这个示例:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_stm32_16

(5)添加头文件路径

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_#include_17

(6)解决 assert 函数编译错误。

lvgl引用的 ​​qrcodegen.c​​​库中使用了 ​​assert​​​函数,但是MDK提供的Micro Lib中不提供此函数,所以要定义 ​​NDEBUG​​ 宏来失效assert函数:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_18

此时编译,可以正常编译通过。

3. 修改lvgl配置文件

修改​​lvgl_conf.h​​文件。

(1)使能配置文件内容:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_#include_19

(2)设置颜色格式为RGB565:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_20

(3)使能widgets demo:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_21

(4)在使用过程中发现lvgl配置文件未生效,在 ​​lvgl.h​​中手动添加配置文件:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_22

4. 修改适配底层屏幕驱动

修改​​lv_port_disp.c​​文件。

(1)使能文件内容

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_初始化_23

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_24

(2)​在头文件中定义水平像素点

#define MY_DISP_HOR_RES   800

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_25

(3)修改 ​​lv_port_disp_init​​ 函数,选择定义缓存的方式,并设置屏幕水平和垂直像素点大小:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_stm32_26

(4)修改​​disp_init​​函数,适配屏幕初始化,调用屏幕初始化函数:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_27

(5)修改​​disp_flush​​函数,适配屏幕驱动函数,这一步是整个移植过程的核心:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_配置文件_28

5. 调用lvgl

修改main.c文件。

(1)包含头文件

#include "lvgl.h"
#include "porting/lv_port_disp.h"
#include "demos/widgets/lv_demo_widgets.h"

(2)依次调用初始化函数:

// 初始化lvgl
lv_init();
// 初始化lvgl底层屏幕驱动
lv_port_disp_init();
// 初始化lvgl demo
lv_demo_widgets();

(3)在while循环中调用lvgl处理函数:

while (1)
{
/* USER CODE END WHILE */
lv_task_handler();

/* USER CODE BEGIN 3 */
}

(4)在Systick中断服务函数中调用lvgl处理函数:

void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */

/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
lv_tick_inc(1);

/* USER CODE END SysTick_IRQn 1 */
}

编译,下载运行进行测试:

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_29

LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)_lvgl_30

lvgl移植搞定,美中不足的是没有触摸驱动,没法拖动,后续补充~



举报

相关推荐

0 条评论