LVGL学习笔记

2023-11-03

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

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。https://github.com/lvgl/)

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移植完成。
官方参考文档:https://docs.lvgl.io/latest/en/html/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LVGL学习笔记 的相关文章

随机推荐

  • Java基础之try catch finally的原理

    先看一段代码 public static int test int i 0 try System out println 业务执行 标记1 i 1 0 System out println 业务执行完成 i 标记2 return i cat
  • 双向循环神经网络

    双向循环神经网络结构图
  • LinuxRPM软件安装

    软件管理 软件安装介绍 学软件开发 各种台的软件熟练安装是必须要熟练掌握 大家都知道 Windows下安装软件时 只需用鼠标双击软件的安装程序 或者用Zip等解压缩软件解压缩即可安装 在android或者apple中安装软件时 只需要在手机
  • nginx前后端分离部署无法访问到后端接口

    先看一组错误案例 user nobody worker processes 1 error log logs error log error log logs error log notice error log logs error lo
  • 【程序运行时的两种环境】

    目录 前言 一 翻译环境 一 预编译 二 编译 三 汇编 四 链接 二 执行环境 三 补充 总结 前言 在ANSI C的任何一种实现中 都要经过两种环境 一种是编译环境 用于将程序代码转换为可执行的机器指令 二进制指令 另一种是执行环境 用
  • 【C++】细说C++中的数组之动态数组

    转载自如下位置 https blog csdn net u013921430 article details 79514972 以备学习
  • 前端引入和html标签

    先安装 flask模块 pip install flask from flask import Flask app Flask name 创建了网址 show info 和函数index的对应关系 以后用户在浏览器上访问 show info
  • 前端小程序面试题(一)

    首先说一些为什么总结小程序相关的面试题吧 我们可以随便打开一个招聘网站 在那里你会发现市场对于小程序的需求还是蛮高的 有些公司可能就只需要写小程序的前端人员 虽然小程序的开发很大一部分都是很简单的 但是有些常用的东西还是有必要了解一下的 故
  • Android代码实现APK文件的安装与卸载

    Android程序使用代码的安装和卸载 安装 String str CanavaCancel apk String fileName Environment getExternalStorageDirectory str Intent in
  • Zebra-VTYSH源码分析和改造(二):深入代码

    分析Zebra VTYSH的源码 首先从main函数开始 在ztysh main c中找到main函数 来进一步分析流程执行如下图所示 在平时的使用中我们会发现 配置的时候有很多的视图 View 每个视图中有不同的命令可供用户输入进行配置
  • STM32—Flash读写详解

    目录 前言 介绍 STM32 FLASH 闪存的编程和擦除 Flash读写的标准库函数 软件设计 FLASH的读取 直接读取某一地址的内容 读取选定位置的选定大小的内容 FLASH的写入 直接使用标准库写入 写入选定位置的选定大小的内容 如
  • mega328p-ADC,PWM,UART驱动

    ADC驱动 函 数 名 Ai Init 函数功能 Ai端口初始化 输入参数 void 输出参数 void 返 回 值 void 参考文档 void 创 件 人 程强刚 创建日期 2016 02 09 修改历史 void Ai Init vo
  • 身份认证之多因素身份认证(MFA)

    我们大多数人都同意密码是不安全的身份验证形式这一观点 更糟糕的是 它完全不智能 但这引发了一个问题 如果密码不是解决安全问题的答案 那什么是 目前 答案可能是多因素身份验证 MFA 多因素身份验证增加了一层关键的防御 MFA使用两个或多个因
  • Filter过滤器完成验证代码的封装

    Filter过滤器完成验证代码的封装 filter是什么 1 使用filter 2 filter配置到项目中 验证用户权限是需要反复使用的代码块 把他封装到filter中 减少代码冗余 filter是什么 init 方法 初始化方法 在创建
  • 主板上还剩啥?CPU整合GPU/北桥/南桥

    泡泡网主板频道2月6日 众所周知 主板上最重要 成本最高的两颗芯片 被称为北桥和南桥 其中北桥负责与处理器对接 主要功能包括 内存控制器 PCI E控制器 集成显卡 前 后端总线等 都是速度较快的模块 而南桥则负责外围周边功能 速度较慢 主
  • c++ 读写excel_每天10分钟,轻松入门python,json、csv等读写

    JSON的全称是 JavaScript Object Notation 意思是JavaScript对象表示法 它是一种基于文本 独立于语言的轻量级数据交换格式 这种数据在弄爬虫的时候 经常会见到这类型的数据 下面展示一个简单的json数据
  • 利用计数器实现任意分频,占空比为60%(任意占空比)电路 [VHDL]

    本次实验为利用计数器实现分频常数为24000 占空比为60 的电路 也可以设置为任意分频 任意占空比的电路 一 设计思路 设计分析 要将原来的占空比为50 大频率的信号重新设为60 占空比 频率较小的周期信号 其中频率的思想就是分频器 利用
  • Northstar软件下载 以及搭建机器人时遇到的坑

    上个学期学机器人的时候 老师让我们用 innostar 创意之星 做出一个机器人来 但我翻遍全网也没找到创意之星的配套软件 我找了三天也没找到 公司官网也没有 给博创的人发邮件也不回 给我整的心态爆炸 为了方便后来的学弟学妹们 现在把我找到
  • Java 优先队列(PriorityQueue)总结

    PriorityQueue 实现的是 Queue 接口 可以使用 Queue 提供的方法 以及自带的方法 1 PriorityQueue概述 Java PriorityQueue 实现了 Queue 接口 不允许放入 null 元素 其通过
  • LVGL学习笔记

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 硬件要求 二 移植 1 准备工作 2 文件准备 3 加入工程 前言 LVGL 轻巧而多功能的图形库 是一个免费的开放源代码图形库 它提供创建具有易于使用的