文章目录

  • 前言
  • 1.1 LVGL简介
  • 1.2 LVGL移植要求
  • 1.3 LVGL源码下载与介绍

前言

在实际应用中,我们时常需要制作 UI 界面来实现人机交互,简单的 UI 可以直接编写代码,但对于那些复杂的交互界面,自己编写 UI 界面可能就力不从心了。因此可使用第三方的 GUI库来设计 UI界面,例如 LVGL、emWin、QT等图形用户库,它们都可以设计漂亮的 UI界面。本章主要是认识和了解LVGL图形用户界面,本章分为如下几部分内容:
1.1 LVGL简介
1.2 LVGL移植要求
1.3 LVGL源码下载与介绍


1.1 LVGL简介

LVGL(Light and Versatile Graphics Library)是一个免费的开源图形库,提供创建具有易于使用的图形元素、漂亮的视觉效果和低内存占用的嵌入式 GUI。接下来我们来看一下 LVGL图形用户库的主要特征有哪些:

  1. 强大的构建块:按钮、图表、列表、滑块、图像等部件。
  2. 具有高级图形属性:具有动画、抗锯齿、不透明度、平滑滚动的高级图形。
  3. 支持各种输入设备:如触摸、鼠标、键盘、编码器。
  4. 支持多语言:UTF-8 编码。
  5. 支持多显示器:它可以同时使用多个 TFT 或者单色显示器。
  6. 支持多种样式属性:它具有类 CSS 样式的完全可定制的图形元素。
  7. 独立于硬件之外:它与任何微控制器或显示器一起使用。
  8. 可扩展性:它能够以小内存运行(最低 64 kB 闪存,16 kB RAM 的 MCU)。
  9. 支持操作系统、外部存储器和 GPU(不是必需的)。
  10. 具有高级图形效果:可进行单帧缓冲区操作。
  11. 纯 C 编写: C语言编写以获得最大的兼容性。
    从上述特征可知:LVGL 是一款具有丰富的部件,具备高级图形特性,支持多种输入设备,多国语言和独立于硬件之外等免费的开源图形库。LVGL 官方地址为:https://lvgl.io/,该网页主要包含用户文档以及图片和字体转换器,该网页打开后如下图所示:

上图中左下角的“Github”图标可点击进入下载 LVGL相关源码的网页;上图中左下角的“Docs”图标可点击进入 LVGL用户文档,该文档是纯英文编写的,主要讲解 LVGL移植方式和各个部件的使用;上图右上角的“Tools”选项主要提供用户图片和字库在线转换器,这些转换器是以某种规则把目标文件转换成嵌入式可读取的文件。
点击上图中左下角的“Docs”图标进入 LVGL 在线用户文档,该文档是为了用户能快速上手LVGL 图形库并且它还提供了初学者学习的源码和资料,该在线用户文档网页如下所示:

从上图可知:LVGL的在线文档教程是英文文档,如果读者对英文很了解,笔者建议看官方的在线教程;如果读者对英文很敏感,则笔者建议看本教程的内容,因为本教程是根据LVGL 在线教程翻译而编写的,它能让读者快速掌握 LVGL 下图形用户界面的开发与使用。在以后的章节中,笔者重点讲解上图的 Widgets 和 3rd party libraries 章节的内容,这些内容占据了 LVGL的70%内容,所以笔者希望读者能掌握这些内容。


1.2 LVGL移植要求

在市面上具有众多的 MCU 微处理器,这些处理器并不是每一个都适合移植 LVGL 图形库,如传统的 51单片机等微处理器,它们并不具备 LVGL 图形库的移植条件,因为 LVGL图形库无论对 MCU还是 LCD 显示屏都是具备相应的要求才能移植,下面我们分别地讲解它们的硬件要求有哪些。
(1)MCU的要求
LVGL图形库移植对 MCU是有要求的,每一个能够驱动显示器的 MCU 是否能运行 LVGL图形库,取决于 MCU 是否具备 LVGL 的最低移植需求。该最低移植需求如下图所示:

从上图可知:微处理器至少是 16 位以上的,显然有些微处理器并不满足这个最低移植需求,如宏晶科技 STC89Cxx和高性能 HCS08系列等处理器,它们都是 8位微处理器单元。接下来,笔者以STM32F103ZET6开发板来对比是否满足 LVGL 最低移植需求。STM32开发板的主控 MCU 是 32 位微处理器单元,它的主频率为72MHz,内嵌 Flash 为512KB 以及内嵌 SRAM 为 64KB 等资源信息,这些资源信息比图中的LVGL 最低移植要求是远远大于的,所以STM32F103ZET6开发板可移植 LVGL 图形库。
(2)显示屏的要求
LVGL只需要一个简单的驱动程序函数即可将像素阵列复制到显示器的给定区域中,这就是 LVGL 调用显示驱动绘画原理,下面笔者来讲解一下 LVGL 对显示屏的需求有哪些,如下所示:
① 具有 8/16/24/32 位色深的显示屏。
② HDMI 端口的显示器。
③ 小型单色显示器。
④ 灰度显示。
⑤ LED矩阵。
⑥ 其它可以控制像素颜色/状态的显示器。
从上述要求可知:开发板可搭配的TFTLCD模块或 RGBLCD模块都是 16 位深的显示屏,这些显示屏可满足 LVGL 的最低显示屏的要求。


1.3 LVGL源码下载与介绍

前面笔者讲解到,LVGL 相关的源码和工程都是存放在 GitHub 远程仓库中,该 GitHub 远程仓库地址为 https://github.com/lvgl/lvgl/,读者可以在浏览器打开并下载 LVGL 图形库最新版本源码。由于 GitHub 服务器是在国外的,所以在国内访问该服务器,可能登录不成功,我们可以在开发板资料目录下获取 LVGL 图形库的源码,该获取路径为:“\4–实验程序\4–GUI人机实验\LVGL实验\LVGL源码及工具”,如下图所示:

上图的“LVGL使用工具”文件夹保存的是 LVGL 相关的离线的转换工具,这些离线工具是广大博主根据 LVGL的字库和图片的处理特性编写的软件,而 lvgl-maser.zip 压缩包是 LVGL图形库的源码,接下来笔者分别地介绍 lvgl-maser.zip 压缩包下的相关文件,首先我们解压图中的lvgl-master.zip 压缩包,解压后的 lvgl-master 文件夹下的内容如下图所示:

在上图中,我们会发现 lvgl-master 目录下有很多文件和文件夹,这些文件和文件夹并不需要用户全部都要了解的,这里我们了解与移植相关的文件和文件夹即可。LVGL 移植所需要的文件夹和文件有 examples文件夹、src文件夹、lv_conf_template.h和 lvgl.h文件,其他的文件与移植无关。下面我们分别介绍上图的重要文件和文件夹如下所示:

对于上述的文件夹,建议读者了解 examples 文件夹和 src 文件夹下的内容即可,其他文件夹与移植无关,接下来我们分别地讲解这两个文件夹的文件结构如下所示:
(1)examples文件夹
该文件夹主要包含 LVGL 部件实例、动画实例、其他第三方库实例以及输入设备和显示器驱动文件,如下所示:

上图的 porting 文件夹和移植相关的,其他的文件夹是提供用户学习的实例。
(2)src文件夹
该文件夹主要包含 LVGL 源文件(部件源码、多种解码库),如下所示:

在以后的学习中,我们重点讲解上表的 widgets 和 extra 文件夹下的文件内的接口使用。

【LVGL应用开发--基于STM32】第1章 初识LVGL相关推荐

  1. 基于stm32的linux开发的书籍,跟工程师学嵌入式开发:基于STM32和μC OS-Ⅲ 带目录高清版pdf...

    本书选用的STM32芯片基于ARM Cortex-M3体系结构,根据基于MCU的嵌入式技术实际应用需求,合理地选择了多种常用的重要外设接口,如USART.SPI.I2C.FSCM.SDIO总线.以太网 ...

  2. 端口数据[精通WindowsSocket网络开发-基于VC++实现]第二章——TCP/IP简介

    最近研究端口数据,稍微总结一下,以后继续补充: OSI 开辟系统互连参考模型(OSI,Open System Interconnection) 物理层:bit流,有计算机和网络介质组成,负责将数据编码 ...

  3. HAL库开发—基于stm32的智能小家电

    先挖个坑

  4. 基于STM32单片机的智能家居测量系统设计

    当今的家庭生活面临着各种环境和健康问题,周围的生活参数存在潜在的隐患,包括室温.气体中有害物质的浓度等.在新时代,人们越来越关注健康及其相关因素.随着微电子技术的应用,电器的普及,以及单片机和传感器性 ...

  5. 在 keil 建立基于STM32开发的工程模板--详细步骤

    手把手教你在keil建立STM32的工程模板 1 先说几句 1.1 什么是STM32? 1.2 什么是cortex? 1.3 什么是ARM? 1.4 什么是意法半导体? 2 硬件平台 2.1 STM3 ...

  6. 基于stm32温湿度采集平台开发

    基于stm32温湿度采集平台开发 ==这里记录一下自己以前课设报告,但是论文中图片和文字.公式太多了,懒得粘贴了,需要完整的私信== 摘 要 关键词 第一章 绪论 1.1 研究背景 1.1.1国内研究 ...

  7. 物联网-移柯L206模块TCP开发(基于STM32+AT命令)

    最近一直在做2g模块联网的项目,用到了移柯L206 2G模块,今天就简单讲一下移柯L206 2G模块基于STM32+AT命令开发TCP联网的过程,参考文档:移柯L206 TCPIP开发流程说明V1.1 ...

  8. 基于STM32的USB CAN收发器开发与设计

    基于STM32的USB CAN收发器开发与设计 一.文章适合人群: 小型化企业,节约设备的购买投入: 有特殊功能需求的个人或企业(例如离线升级,数据抓包盒等): 技术开发爱好者. 二.USB CAN开 ...

  9. 基于STM32开发板I²C总线通信协议浅析

    基于STM32开发板I²C总线通信协议浅析 一.前言 I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980 ...

最新文章

  1. C# 删除文件错误 access denied
  2. hdu 3853 LOOPS 概率DP
  3. SQL Server 2008 复习(一)
  4. 从零开始学springboot笔记(二)-Spring boot返回json数据(中文无乱码)
  5. 福州大学软件1715|W班-助教卞倩虹个人简介
  6. [Swift]LeetCode1118. 一月有多少天 | Number of Days in a Month
  7. IOS autosizing(设置控件的固定位置大小)
  8. 不能调试的问题的解决
  9. ASP.NET Core WebAPI控制器返回类型的最佳选项
  10. php fastdfs扩展,php如何安装fastdfs扩展
  11. matlab中 nntwarn off,network的subsindex的定义问题
  12. 【经验】使用Oracle的SQL Developer创建用户方法
  13. C#创建一个文本文件简单代码
  14. Unhandled exception in MSDEV.EXE(DEVSHL.DLL) 0xC0000005 access violation
  15. 从零开始设计共享电动车充电桩(一)——构思篇
  16. AT指令集及其通信测试方式
  17. 计算机英语作文150字,作文试题_150字_英语作文
  18. 解决POI导出Excel单元格内容换行问题
  19. Linux基础学习笔记(持续更新)
  20. iFunk执政官游戏本,不仅仅是游戏本

热门文章

  1. 猫和老鼠手游的python代码_猫和老鼠手游猫鼠通用技巧讲解 赶紧进来好好向大佬们学习学习...
  2. 利用pandas将Excel分组比较获取差集并
  3. mac 竖屏显示屏鼠标无法从显示器移到mbp上
  4. matlab将一列数分割为若干组,将数据拆分为不同组并计算统计量
  5. 【COPOD】Suppressing Poisoning Attacks on Federated Learning for Medical Imaging
  6. 游程编码(运行长度编码)
  7. Java P2298 Mzc和男家丁的游戏
  8. 论文的可复现性,能否量化分析?
  9. 买卖股票的最优时机含手续费(LeetCode-714)
  10. 英特尔第十代处理器为什么不支持win7_为什么英特尔新推出,i7处理器不支持w7系统,只支持w10...