LVGL v8学习笔记 | 03 - 移植LVGL 8.2到小熊派开发板(SPI屏)
Posted Mculover666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVGL v8学习笔记 | 03 - 移植LVGL 8.2到小熊派开发板(SPI屏)相关的知识,希望对你有一定的参考价值。
一、移植前的准备
1. 裸机工程
2. lvgl源码
下载最新发布的 8.2.0 版本:https://github.com/lvgl/lvgl/releases/tag/v8.2.0
内容如下:
lvgl源码在 src 目录下:
二、移植lvgl
1. 复制lvgl源码到工程中(需要修改)
- src:lvgl源码
- examples:lvgl示例和移植文件模板代码
- lv_conf_template.h:配置文件模板代码
- lvgl.h:lvgl头文件
复制过来后:
(1)将配置文件lv_conf_template.h
重命名为lv_conf.h
;
(2)examples/porting下的文件也进行重命名,去掉_template
。
2. 添加lvgl到工程中
2.1. 添加源码
(1)添加lvgl源码,将src目录下所有的c文件到工程中。
其中draw文件夹除了c文件外,只添加sw文件夹中的内容。
添加完成:
(2)添加lvgl移植代码,examples/porting文件夹中的文件:
(3)添加lvgl配置文件(仅为了方便编辑)
(4)添加 lvgl\\examples\\widgets\\label\\lv_example_label_1.c 这个示例:
2.2. 添加头文件路径
2.3. 编译测试
此时可以编译测试是否文件添加成功。
(1)解决lvgl.h头文件找不到问题。
找到出错误的代码:
原来是要定义宏 LV_CONF_INCLUDE_SIMPLE,在MDK中定义:
(2)解决 assert 函数编译错误。
lvgl引用的 qrcodegen.c
库中使用了 assert
函数,但是MDK提供的Micro Lib中不提供此函数,所以要定义 NDEBUG
宏来失效assert函数:
此时编译,可以正常编译通过,警告不用管。
3. 修改lvgl配置文件
修改lvgl_conf.h
文件。
(1)使能配置文件内容:
(2)设置颜色格式为RGB565:
(3)开启帧率显示和内存占用情况显示
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 "examples/porting/lv_port_disp.h"
#include "examples/lv_examples.h"
(2)依次调用初始化函数:
/* USER CODE BEGIN 2 */
printf("lvgl v8.2 port on BearPi Board\\r\\n");
// 初始化lvgl
lv_init();
// 初始化lvgl底层屏幕驱动
lv_port_disp_init();
// 初始化lvgl demo
lv_example_label_1();
/* USER CODE END 2 */
(3)在while循环中调用lvgl处理函数(裸机程序使用lv_timer_handler):
while (1)
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
lv_timer_handler();
HAL_Delay(5);
(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函数吃栈比较深,决定将栈开大点:
搞定:
可以看到,9FPS的CPU利用率已经到了97%,内存占用5.6KB。
lvgl移植搞定,美中不足的是没有输入设备驱动,没法拖动,后续适配~
以上是关于LVGL v8学习笔记 | 03 - 移植LVGL 8.2到小熊派开发板(SPI屏)的主要内容,如果未能解决你的问题,请参考以下文章