导言
LVGL(光照和通用图形库)是一个免费的开源图形库,它为您提供创建嵌入式GUI所需的一切,具有易于使用的图形元素、美观的视觉效果和较低的内存占用。
关键特征
- 强大的积木,如按钮,图表,列表,滑块,图像等。
- 先进的动画图形,防混叠,不透明,平滑滚动。
- 各种输入设备,如触摸屏、鼠标、键盘、编码器等。
- UTF-8编码对多语言的支持
- 多显示器支持,即同时使用更多tft、单色显示器。
- 完全可定制的图形元素
- 与任何微控制器或显示器无关的硬件
- 可伸缩,只需少量内存(64 kBFlash,16 kBRAM)
- 操作系统、外部内存和GPU支持但不需要
- 即使具有高级图形效果的单帧缓冲区操作
- 用C编写的最大兼容性(C++兼容)
- 在没有嵌入式硬件的PC上启动嵌入式GUI设计的模拟器
- 绑定到MicroPython
- 快速GUI设计教程、示例、主题
- 文档以联机和脱机形式提供。
- 免费开放源码
所需
基本上,每个现代控制器(能够驱动显示器)都适合运行LVGL。最低要求是:
- 16、32或64位微控制器或处理器
- >16 mhz时钟速度是推荐的。
- FLASH/ROM:非常必要的组件>64 kB(推荐>180 kB)
- 拉姆:
- 静态RAM使用情况:~2kB取决于所使用的特性和对象类型
- 堆栈:>2kb(建议>8kB)
- 动态数据(堆):如果使用多个对象,建议>2KB(>16 kB)。由低压MEM尺寸在……里面左室混合液.
- 显示缓冲区:>“水平分辨率”像素(>10×)“水平分辨率”建议)
- 单片机或外部显示控制器中的一个帧缓冲区
- C99或更新编译器
- 基本C(或C++)知识:指针, 结构, 回调
请注意,根据体系结构、编译器和构建选项,内存使用可能有所不同。
许可证
LVGL项目(包括所有存储库)是在麻省理工学院许可证。这意味着你甚至可以在商业项目中使用它。
这不是强制性的,但如果您在我的项目论坛的类别或来自Lvgl.io.
虽然你可以免费得到LVGL,但它背后有一项巨大的工作。它是由一群志愿者创建的,他们在空闲时间为你提供了它。
要使LVGL项目持续下去,请考虑贡献为了这个项目。你可以从许多贡献方式例如,简单地写一条关于你正在使用LVGL的推文,修复bug,翻译文档,甚至成为一个维护人员。
存储库布局
Lvgl项目的所有存储库都托管n gitHub:https://github.com/lvgl。
您可以在那里填充这些存储库:
- Lvgl library自身
- LV exanples 示例和演示
- lv_driver 显示和输入设备驱动程序
- docs 博客文档站点的来源(https://docs.lvgl.io))
- blog 博客网站的来源(https://blog.lvgl.io))
- sim 在线模拟器站点的来源(https://sim.lvgl.io))
- Lv_sim.. 各种IDE和平台的模拟器项目
- Lv_port.. LVGL到开发板的端口
- lv_binding_ 绑定到其他语言
- lv_.. 与其他平台的端口
在Lvgl, lv_examples和lv_drivers是核心存储库,在维护方面得到了最广泛的关注。
释放政策
核心存储库遵循语义版本控制::
- 不兼容API更改的主要版本。例如,v5.0.0,v6.0.0
- 新的但向后兼容的功能的次要版本。例如V6.1.0,V6.2.0
- 用于向后兼容错误修复的修补程序版本。例如V6.1.1,V6.1.2
枝条
核心存储库至少有以下分支:
- master最新版本,补丁将直接合并在这里。
- dev在这里合并新功能,直到它们合并到master.
- release/vX主要版本的稳定版本
释放周期
LVGL有2周的释放周期。每个月的第一个和第三个星期二:
- 一个主要的、次要的或错误的修复版本(基于新特性)是从master支部
- master合并成release/vX
- 释放后立即dev合并成master
- 在接下来的两周内,master可以测试
- 错误修复将直接合并到master
- 两周后,从第一点开始
标签
像这样的标签vX.Y.Z是为每个版本创建的。
变更记录
这些变化记录在CHANGELOG.md.
附带项目
这个docs每次发行都会重建。默认情况下,latest文档显示为当前masterLvgl的分支。较早版本的文档可从左边的菜单中获得。
仿真器、移植和其他项目都会尽最大努力进行更新。如果您更新了其中一个请求,则欢迎拉请求。
版本支持
在核心存储库中,每个主要版本都有一个分支。release/v6)。该主要版本的所有次要版本和补丁版本都在那里合并。
它可以添加固定的旧版本,而不打扰较新的版本。
所有主要版本的官方支持时间为1年。
常见问题
我在哪里可以问问题?
你可以在论坛上提问:Https://forum.lvgl.io/.
我们用GitHub问题与发展有关的讨论。所以,只有当你的问题或问题与图书馆的发展紧密相关时,你才应该使用它们。
我的MCU/硬件支持吗?
每一个能够通过并行口、SPI、RGB接口或任何其他方式驱动显示器的单片机都可以实现所需由LLVGL支持。
它包括:
- “通用”MCU,如STM32F、STM32H、NXP Dynamtis、LPC、IMX、dsPIC 33、PIC 32等。
- 蓝牙,GSM,WiFi模块,如北欧NRF和Espressif ESP 32
- Linux帧缓冲区,如/dev/fb0,其中也包括单板计算机,如Raspberry PI
- 任何其他的东西,只要有足够强大的单片机和外围设备,就可以驱动显示器。
我的显示器支持吗?
LVGL只需要一个简单的驱动函数就可以将像素数组复制到给定的显示区域。如果你可以用你的显示器来做这件事,那么你可以在LVGL中使用这个显示器。
支持的显示类型的一些示例:
- 颜色深度为16或24位的TFT
- 带有HDMI端口的监视器
- 小型单色显示器
- 灰度显示器
- 偶LED矩阵
- 或任何其他可以控制像素颜色/状态的显示器。
见移植了解更多信息。
什么都没有发生,我的显示驱动程序没有被调用。我错过了什么?
一定要调用lv_tick_inc(x)在中断和lv_task_handler()和你的mainwhile(1).
了解更多Tick和Task handler任务处理程序部分。
为什么只调用一次显示驱动程序?只刷新显示器的上部。
一定要打电话lv_disp_flush_ready(drv)在你的“display flush callback显示刷新回调".
为什么我只看到屏幕上的垃圾?
你的显示驱动程序可能有错误。在不使用LVGL的情况下尝试以下代码。你应该看到一个红蓝渐变的正方形。
#define BUF_W 20
#define BUF_H 10
lv_color_t buf[BUF_W * BUF_H];
lv_color_t * buf_p = buf;
uint16_t x, y;
for(y = 0; y < BUF_H; y++) {
lv_color_t c = lv_color_mix(LV_COLOR_BLUE, LV_COLOR_RED, (y * 255) / BUF_H);
for(x = 0; x < BUF_W; x++){
(*buf_p) = c;
buf_p++;
}
}
lv_area_t a;
a.x1 = 10;
a.y1 = 40;
a.x2 = a.x1 + BUF_W - 1;
a.y2 = a.y1 + BUF_H - 1;
my_flush_cb(NULL, &a, buf);
为什么我在屏幕上看到非感颜色?
可能LVGL的颜色格式与您的显示器颜色格式不兼容。查帐LV_COLOR_DEPTH在……里面左室混合液.
如果在spi(或其他面向字节的接口)中使用16位颜色,则可能需要设置LV_COLOR_16_SWAP 1在……里面左室混合液。它交换像素的上字节和下字节。
如何加快我的UI?
- 打开编译器优化,如果您的MCU有
- 增加显示缓冲区的大小
- 使用两个显示缓冲区,并在后台使用DMA(或类似的外围)刷新缓冲区。
- 如果使用SPI或并行口驱动显示器,则增加它们的时钟速度。
- 如果您的显示器有spi端口,请考虑使用并行的模型,因为它的吞吐量要高得多。
- 将显示缓冲区保存在内部RAM中(而不是在外部SRAM中),因为lvgl经常使用它,而且访问时间应该很短。
如何减少闪存/ROM的使用?
您可以禁用所有未使用的功能(如动画、文件系统、GPU等)。中的对象类型左室混合液.
如果您正在使用GCC,您可以添加
- -fdata-sections -ffunction-sections编译器标志
- --gc-sections链接器标志
从最终二进制文件中删除未使用的函数和变量
如何减少RAM的使用
- 控件的大小降低。显示缓冲器
- 减少LV_MEM_SIZE在……里面左室混合液。此内存用于创建诸如按钮、标签等对象。
- 与较低的人一起工作LV_MEM_SIZE只有在需要时才能创建对象,不再需要时才可以删除对象。
如何使用操作系统?
要使用任务可以相互中断(先发制人)的操作系统,您应该使用互斥保护与LVGL相关的函数调用。见操作系统和中断了解更多信息。
2020年版权所有,LVGL有限责任公司最后更新于2020年11月3日。
Built with Sphinx using a theme provided by Read the Docs..