LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)
Posted Mculover666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)相关的知识,希望对你有一定的参考价值。
一、移植前的准备
1. 裸机工程
2. lvgl源码
下载最新发布的 8.2.0 版本:https://github.com/lvgl/lvgl/releases/tag/v8.2.0
内容如下:
lvgl源码在 src 目录下:
二、移植lvgl
1. 复制lvgl源码到工程中(需要修改)
- src:lvgl源码
- examples\\porting:lvgl移植文件模板代码
- lv_conf_template.h:配置文件模板代码
- lvgl.h:lvgl头文件
复制过来后,将配置文件lv_conf_template.h
重命名为lv_conf.h
:
porting下的文件也进行重命名,去掉_template
:
2. 添加lvgl到工程中
(1)添加lvgl源码
添加draw文件夹之下的代码,同时添加其sw文件夹下的文件:
添加extra文件夹下的所有文件:
(2)添加lvgl移植代码
(3)添加lvgl配置文件(仅为了方便编辑)
(4)添加lvgl demo/widgets 这个示例:
(5)添加头文件路径
(6)解决 assert 函数编译错误。
lvgl引用的 qrcodegen.c
库中使用了 assert
函数,但是MDK提供的Micro Lib中不提供此函数,所以要定义 NDEBUG
宏来失效assert函数:
此时编译,可以正常编译通过。
3. 修改lvgl配置文件
修改lvgl_conf.h
文件。
(1)使能配置文件内容:
(2)设置颜色格式为RGB565:
(3)使能widgets demo:
(4)在使用过程中发现lvgl配置文件未生效,在 lvgl.h
中手动添加配置文件:
4. 修改适配底层屏幕驱动
修改lv_port_disp.c
文件。
(1)使能文件内容
(2)在头文件中定义水平像素点
#define MY_DISP_HOR_RES 800
(3)修改 lv_port_disp_init
函数,选择定义缓存的方式,并设置屏幕水平和垂直像素点大小:
(4)修改disp_init
函数,适配屏幕初始化,调用屏幕初始化函数:
(5)修改disp_flush
函数,适配屏幕驱动函数,这一步是整个移植过程的核心,可以用打点函数适配(速度较慢),也可用填充数据函数适配(速度较快):
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移植搞定,美中不足的是没有触摸驱动,没法拖动,后续补充~
以上是关于LVGL学习笔记 | 02 - 移植LVGL 8.2到STM32F407开发板(MCU屏)的主要内容,如果未能解决你的问题,请参考以下文章
ESP32学习笔记 - 基于 ESP32 移植 LVGL8.3