第一章 初识 LVGL

第一章 初识 LVGL

1.1 认识 LVGL

        LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效果和低内存占用。

1.2 主要特性

  • 丰富且强大的模块化图形组件:按钮 (buttons)、图表 (charts)、列表 (lists)、滑动条 (sliders)、图片 (images) 等
  • 高级的图形引擎:动画、抗锯齿、透明度、平滑滚动、图层混合等效果
  • 支持多种输入设备:触摸屏、 键盘、编码器、按键等
  • 支持多显示设备
  • 不依赖特定的硬件平台,可以在任何显示屏上运行
  • 配置可裁剪(最低资源占用:64 kB Flash,16 kB RAM)
  • 基于UTF-8的多语种支持,例如中文、日文、韩文、阿拉伯文等
  • 可以通过类CSS的方式来设计、布局图形界面(例如:Flexbox、Grid)
  • 支持操作系统、外置内存、以及硬件加速(LVGL已内建支持STM32 DMA2D、NXP PXP和VGLite)
  • 即便仅有单缓冲区(frame buffer)的情况下,也可保证渲染如丝般顺滑
  • 全部由C编写完成,并支持C++调用
  • 支持Micropython编程,参见:LVGL API in Micropython
  • 支持模拟器仿真,可以无硬件依托进行开发
  • 丰富详实的例程
  • 详尽的文档以及API参考手册,可线上查阅或可下载为PDF格式
  • 在 MIT 许可下免费和开源
    综上可知: LVGL 是一款具有丰富部件, 具备高级图形特性,支持多种输入设备和多国语言, 独立于硬件之外的开源图形库。 LVGL 官方地址为: https://lvgl.io/, 该网页主要包含用户文档、 图片转换器和字体转换器,该网页打开后如图 2.1.1 所示:在这里插入图片描述
图 2.1.1 LVGL 官方网页
        上图中,点击“Get Started”图标即可打开 LVGL 官方文档,该文档是纯英文编写的,主要讲解 LVGL的基础知识、 移植、 部件使用、示例,等等。 若您的英文水平不足以轻松阅读该文档, 可以先跟着我一起学习,遇到疑惑的地方,再结合 LVGL 官方文档进行辨正。再次网页的最下方点击“GitHub”图标即可进入 LVGL 源码的 github 仓库,在该仓库中,可以下载LVGL 相关的源码;

1.3 LVGL 配置要求

        市面上拥有众多的微处理器(MCU) , 但并不是每一个 MCU 都适合移植 LVGL 图形库,例如传统的 51 单片机,它并不具备移植 LVGL 图形库的条件。 下面我们来看看 LVGL 对硬件的要求。

  1. MCU
    LVGL 图形库对微处理器具有一定的要求, 例如主频、内存等, 具体要求如下表所示:
要求说明
微控制器16、 32 、 64 位的微控制器或处理器
主控频率(Hz)> 16 MHz 时钟速度
Flash/ROM> 64 kB ,如果使用非常多的部件, 推荐 > 180 kB
内存(RAM)8kB(建议配置 24kB)
动态数据(堆)> 2 KB (> 如果使用多个对象,建议使用 16 kB). 在 lv_conf.h 文件中配置 LV_MEM_SIZE 生效
显示缓冲区> “水平分辨率”像素(推荐 >10 × 10ד 水平分辨率”)

从上表可知: 微处理器至少需要 16 位以上, 所以传统的 51、 52 单片机无法移植 LVGL,它们都是 8 位的微处理器。

  1. 显示屏
            LVGL 只需要一个简单的驱动程序函数即可将像素阵列复制到显示器的给定区域中, 其对显示屏的兼容性很强,具体要求如下(满足其一即可) :
            ① 具有 8/16 /24/ 32 位色深的显示屏。
            ② HDMI 端口的显示器。
            ③ 小型单色显示器。
            ④ LED 矩阵。
            ⑤ 其他可以控制像素颜色/状态的显示器。

1.4 LVGL 数据流概述

在这里插入图片描述
        您将 LVGL 添加到您的项目中,为其提供 inputs 和像素流向显示面板的方法,连接 Tick 接口,以便 LVGL 可以判断现在几点,定期调用 Timer Handler,为 LVGL 来渲染交互式 UI,让 LVGL 完成其余工作。Timer Handler 函数驱动 LVGL 的定时器,而 LVGL 的定时器又会执行 周期性任务数:

  • 刷新显示器,
  • 读取输入设备、
  • 根据用户输入(和其他内容)触发事件,
  • 运行任何动画,以及
  • 运行用户创建的计时器。

        初始化之后,应用程序的任务仅仅是在需要时创建Widget树,管理这些Widget生成的事件(通过用户交互和类似的方式),并在不再需要它们时删除它们。剩下的事由LVGL负责。

1.5 LVGL 源码下载

        LVGL 相关的源码和工程都是存放在 GitHub 远程仓库中,该 GitHub 远程仓库地址为https://github.com/lvgl/lvgl/, 用户可以该仓库中下载 LVGL 图形库的源码。

  1. 您可以从下面的列表获取到lvgl所有相关的代码仓库:
  • lvgl:本身有很多 例子 和 演示示例。
  • lv_drivers: 显示和输入设备驱动程序。
  • 博客: 博客站点的来源。
  • sim: 在线模拟器网站的来源。
  • lv_port_*: LVGL到端口或开发板。
  • lv_binding_*: 绑定到其他语言。
  1. lvgl文件结构说明
    在这里插入图片描述
            由上图可知, LVGL 源码的目录下有很多文件和文件夹, 但用户并不需要完全了解它们,我们只需要了解与移植相关的部分即可。 各文件夹和文件的功能如下表所示:
文件说明
demosLVGL 提供的综合演示源码
docsLVGL 文献,主要说明 LVGL 每个部件的使用方法
env_support环境的支持(MDK、 ESP、 RTThread、Zephyr)
examplesLVGL 例程源码和 LVGL 输入设备驱动,显示屏驱动文件
scriptsLVGL 手稿(与 MicroPython 有关)
srcLVGL 源文件(LVGL 部件源码、第三方库)
tests官方人员的测试代码, 该文件夹用户无需了解
lv_conf_template.hLVGL 的剪裁文件
lvgl.hLVGL 包含的头文件

上表中, 与 LVGL 移植相关的有 examples 文件夹、 src 文件夹、 lv_conf_template.h 和 lvgl.h文件,其他的部分均与移植无关,用户可以选择忽略。 接下来我们分别看一下 examples、 src这两个文件夹的文件结构:

  1. examples 文件夹
    该文件夹主要包含 LVGL部件实例、动画实例、其他第三方库实例以及输入设备和显示器
    驱动文件等内容, 具体如下表所示:
文件描述
animLVGL 动画例程实例
arduino开源电子平台
assets图片资源
eventLVGL 事件机制实例
get_startedLVGL 获取状态实例
layoutsLVGL 布局实例
libsLVGL 移植第三方库实例
othersLVGL 其他测试
portingLVGL 输入设备驱动、 文件系统驱动以及显示器驱动
scrollLVGL 滚动实例
stylesLVGL 对象样式实例
widgetsLVGL 部件实例

上表中,只有 porting 文件夹与移植相关,其他文件夹中存放的是各种实例。

  1. src 文件夹
    该文件夹主要包含 LVGL 源文件(部件源码、 多种解码库) , 具体如下表所示:
文件描述
coreLVGL 核心源码(事件、组、对象、坐标、样式、主题)
drawLVGL 绘画驱动(图片、 解码、 DMA2D、圆、线、圆弧、和文本)
extraLVGL 的拓展内容(布局、第三方库、其他测试、主题以及部件)
fontLVGL 字库
gpuLVGL 针对图形加速
hal硬件抽象层(显示驱动程序、输入设备程序以及 LVGL 系统滴答)
misc主要描述 LVGL 其他定义(动画、内存管理、 日志)
widgetsLVGL 基础部件

上表中的内容都是与移植相关的, 具体的移植方法我们后面将详细介绍,目前大家只需要对 LVGL 源码的文件结构有一定了解即可。

注:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值