目前只写了显示部分,输入没有

首先,低性能的MCU中,最好还是用LVGL8,这个LVGL9比LVGL8要慢

LVGL需要定时给出心跳让任务进行

lv_tick_inc(1);

LVGL给出心跳后,需要手动让任务运行,而不是直接不用管像是callback一样。

需要注意的是,这个函数用的内存比较大,之前在main里运行,给出1024直接死机,给到2048才能运行,具体站多大空间和屏幕是不是有关系我不清楚。

lv_timer_handler();

我的操作是给出一个任务,定时给心跳,定时运行LVGL任务

void BEATS_TASK(void *parameter)
{
	uint8_t i = 0;
	while(1)
	{	
		i++;
		lv_tick_inc(1);
		rt_thread_mdelay(1);
		if(i>=5)
		{
			i=0;
			lv_timer_handler();
		}
	}
}

使用MDK移植LVGL9.2

LVGL使用的基本流程

1、初始化LVGL

lv_init();

2、初始化屏幕显示与输入,这里只写了屏幕显示

lv_port_disp_init();

3、打开LVGL心跳,参考屏幕开头的心跳任务

自己用可以用任意方式搞,比如用定时器给心跳,lv_timer_handler别放在中断里,比较慢

beats_thread = rt_thread_create("adcthread",BEATS_TASK,RT_NULL,2048,3,10);
	if(beats_thread != RT_NULL)
	{
		rt_thread_startup(beats_thread);
		rt_kprintf("start beats_thread OK");
	}

4、LVGL显示的东西初始化(这里是NXP生成的,自己写的话也是在这写)

	setup_ui(&guider_ui);
	events_init(&guider_ui);

5、LVGL任务运行,写在了LVGL心跳任务里lv_timer_handler

移植

首先,屏幕可以正常使用【有初始化、画点\填充函数】

1、加入LVGL

1738913763396

这里只用到了显示,就没有选input

Preprocessor Symbols Define

改完了,error不会没的,只是说下面操作后就不会有问题了,事实上这一步应该在修改lv_conf.h文件之后做

然后先运行一下,会发现有很多错误,仔细观察会发现都是找不到文件,如

1738915274957

这里加入一个Define,让文件去包含lv_conf.h,像默认使用相对路径的,我确实不知道这个东西该放哪

看上面写的,在define里加入LV_CONF_INCLUDE_SIMPLE即可

1738915389021

因为目前没有修改文件,lv_conf.h的名字现在还是lv_conf_cmsis.h。

2、根据提示修改文件

要修改的文件有三个:lv_conf.h,lv_port_disp.h,lv_port_disp.c

在MDK中生成的,加了后缀,没有办法直接用,需要复制文件到其他地方,进行修改

1738914981483

三个模板文件不用删,复制出来,改一下文件名保存就行;删了也不碍事

先把三个文件复制一下,改文件名,去掉后缀

文件在./MDK-ARM/RTE/LVGL中

1738915926364

将新的文件加入工程中以便后续修改

1738916068959

1、lv_conf.h

MDK生成的lv_conf.h是默认打开的,对于这个文件,只要根据自己的需要进行裁剪即可

1、使用的图片格式

1738916280907

2、lvgl占用的内存大小

这里我将内存大小改小了

1738916315439

2、lv_port_disp.h

1、这个文件默认不被编译的,需要把文件打开把0改成1即可

1738916623372

2、增加Define

在文件中可以看到,有一个include“lvgl/lvgl.h”

这样会导致找不到文件。可以加入上面的Define LV_LVGL_H_INCLUDE_SIMPLE来让#include"lvgl.h"生效

1738917523227

1738917550108

3、lv_port_disp.c

1、让文件参与编译,把#if 0改为1

1738916686220

2、修改错误的头文件名

将下面文件的_template删掉

1738916788683

3、修改屏幕大小参数

根据自己屏幕设置

1738916742796

4、选择缓冲区

lvgl给出了三种缓冲设置,具体自己搜了去了解,我这里选最省空间的,把example2和3注释掉

1738916945599

5、屏幕写入

这里写入方法多种多样,目前写最费时间的方法,使用画点函数

1738917072493

在lvgl9中,传入的是8位的数,而我的画点函数是16位的,要进行这样的操作

6、屏幕初始化

在箭头处放入自己的屏幕初始化函数

我没有写这里。

该函数在lv_port_disp_init()中调用。如果没写的话,在调用lv_port_disp_init之前自己调用屏幕初始化函数即可

1738917144557

使用

直接拿gui_guider生成的文件来说

复制这两个到工程中

1738918689211

在工程中

//1.包含头文件
#include "gui_guider.h"
#include "events_init.h"
//2、创建对象
lv_ui guider_ui;
//3、调用函数
setup_ui(&guider_ui);
events_init(&guider_ui);