LVGL学习笔记

编程入门 行业动态 更新时间:2024-10-10 21:33:31

LVGL<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记"/>

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学习笔记

本文发布于:2024-03-06 00:08:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713831.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   LVGL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!