学习笔记"/>
LVGL学习笔记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、硬件要求
- 二、移植
- 1、 准备工作
- 2、 文件准备
- 3、 加入工程
前言
LVGL(轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,是一款拥有精美的视觉效果和低内存占用的嵌入式GUI。本文主要介绍lvgl的详细移植过程。
一、硬件要求
LVGL的最低运行要求很低:
●16、32或64位微控制器或处理器
●最低 16 MHz 时钟频率
●Flash/ROM::对于非常重要的组件要求 >64 kB(建议 > 180 kB)
●RAM
静态 RAM 使用量:~2 kB,取决于所使用的功能和对象类型
堆栈: > 2kB(建议 > 8 kB)
动态数据(堆):> 2 KB(如果使用多个对象,则建议 > 16 kB)。由 lv_conf.h 中的 LV_MEM_SIZE 宏进行设置。
显示缓冲区:> “水平分辨率”像素(建议 > 10× “水平分辨率” )
MCU 或外部显示控制器中的一帧缓冲区
●C99或更高版本的编译器
●具备基本的C(或C ++)知识:指针,结构,回调…
二、移植
1、 准备工作
●一份带屏幕驱动的工程(这里以GD32F450为例,支持国产!)
●lvgl源码(在官网获取,我这里使用的是lvgl9.0。/)
2、 文件准备
下载lvgl源码并解压得到移植所需的所有文件,在自己的工程目录下新建一个GUI文件夹,将下图方框选中的文件复制到GUI文件夹中。
将部分文件名进行修改(非必要,为了统一命名风格)
●lv_conf_template.h–>lv_conf.h
●\examples\porting此目录文件是GUI与工程的API接口文件,修改后如图
3、 加入工程
打开工程,添加lvgl\examples\porting目录下的文件和lvgl\src目录下的所有文件到工程中。
添加demo。
添加头文件路径:
添加lvgl\src目录和所有子文件夹目录
添加lvgl\examples和lvgl\examples\porting目录
添加示例demo的目录
每层目录最好都添加
选择C99模式
修改lv_conf.h文件:
●增加两个屏幕尺寸的宏定义,以实际屏幕像素点修改
●修改原有的屏幕像素格式宏定义,以实际屏幕像素点修改
#define LV_HOR_RES_MAX 800
#define LV_VER_RES_MAX 480
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 16
修改lv_port_disp.c文件,修改disp_flush函数,加入自己的矩形填充函数,各参数来源参考下列代码
/*Flush the content of the internal buffer the specific area on the display*You can use DMA or any hardware acceleration to do this operation in the background but*'lv_disp_flush_ready()' has to be called when finished.*/
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{/*Return if the area is out the screen*/if(area->x2 < 0) {return;}if(area->y2 < 0) {return;}if(area->x1 > LV_HOR_RES_MAX - 1) {return;}if(area->y1 > LV_VER_RES_MAX - 1) {return;} /*将区域截断到屏幕上*/int32_t act_x1 = area->x1 < 0 ? 0 : area->x1;int32_t act_y1 = area->y1 < 0 ? 0 : area->y1;int32_t act_x2 = area->x2 > LV_HOR_RES_MAX - 1 ? LV_HOR_RES_MAX - 1 : area->x2;int32_t act_y2 = area->y2 > LV_VER_RES_MAX - 1 ? LV_VER_RES_MAX - 1 : area->y2;/* 屏幕图片显示 */ lcd.LCD_Color_Fill(act_x1,act_y1,act_x2,act_y2,(unsigned short *)color_p);/*IMPORTANT!!!*Inform the graphics library that you are ready with the flushing*/lv_disp_flush_ready(disp_drv);
}
在定时器中为GUI提供心跳,定时器中断周期是几ms就填几
lv_tick_inc(1);
初始化并运行任务中断
lv_init(); //lvgl初始化lv_port_disp_init();//显示器显示初始化lv_demo_widgets(); //UI创建while (1){/* 执行UI任务 */lv_task_handler();}
至此,LVGL移植完成。
官方参考文档:.html
更多推荐
LVGL学习笔记
发布评论