目前只写了显示部分,输入没有
首先,低性能的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
这里只用到了显示,就没有选input
Preprocessor Symbols Define
改完了,error不会没的,只是说下面操作后就不会有问题了,事实上这一步应该在修改lv_conf.h文件之后做
然后先运行一下,会发现有很多错误,仔细观察会发现都是找不到文件,如
这里加入一个Define,让文件去包含lv_conf.h,像默认使用相对路径的,我确实不知道这个东西该放哪
看上面写的,在define里加入LV_CONF_INCLUDE_SIMPLE即可
因为目前没有修改文件,lv_conf.h的名字现在还是lv_conf_cmsis.h。
2、根据提示修改文件
要修改的文件有三个:lv_conf.h,lv_port_disp.h,lv_port_disp.c
在MDK中生成的,加了后缀,没有办法直接用,需要复制文件到其他地方,进行修改
三个模板文件不用删,复制出来,改一下文件名保存就行;删了也不碍事
先把三个文件复制一下,改文件名,去掉后缀
文件在./MDK-ARM/RTE/LVGL中
将新的文件加入工程中以便后续修改
1、lv_conf.h
MDK生成的lv_conf.h是默认打开的,对于这个文件,只要根据自己的需要进行裁剪即可
1、使用的图片格式
2、lvgl占用的内存大小
这里我将内存大小改小了
2、lv_port_disp.h
1、这个文件默认不被编译的,需要把文件打开把0改成1即可
2、增加Define
在文件中可以看到,有一个include“lvgl/lvgl.h”
这样会导致找不到文件。可以加入上面的Define LV_LVGL_H_INCLUDE_SIMPLE来让#include"lvgl.h"生效
3、lv_port_disp.c
1、让文件参与编译,把#if 0改为1
2、修改错误的头文件名
将下面文件的_template删掉
3、修改屏幕大小参数
根据自己屏幕设置
4、选择缓冲区
lvgl给出了三种缓冲设置,具体自己搜了去了解,我这里选最省空间的,把example2和3注释掉
5、屏幕写入
这里写入方法多种多样,目前写最费时间的方法,使用画点函数
在lvgl9中,传入的是8位的数,而我的画点函数是16位的,要进行这样的操作
6、屏幕初始化
在箭头处放入自己的屏幕初始化函数
我没有写这里。
该函数在lv_port_disp_init()中调用。如果没写的话,在调用lv_port_disp_init之前自己调用屏幕初始化函数即可
使用
直接拿gui_guider生成的文件来说
复制这两个到工程中
在工程中
//1.包含头文件
#include "gui_guider.h"
#include "events_init.h"
//2、创建对象
lv_ui guider_ui;
//3、调用函数
setup_ui(&guider_ui);
events_init(&guider_ui);