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屏)的主要内容,如果未能解决你的问题,请参考以下文章

LVGL v8学习笔记 | 07 - 字体的使用方法

LVGL v8学习笔记 | 07 - 字体的使用方法

图形库LVGL v8.2版本移植

ESP32学习笔记 - 基于 ESP32 移植 LVGL8.3

图形库LVGL v8.2版本移植

LVGL v8学习笔记 | 10 - Tabview控件的使用方法