赞
踩
LVGL是一款高度可裁剪、界面符合现代审美、简单易用的开源免费嵌入式图形库(MIT 协议),创始人是来自匈牙利的 Gábor Kiss-Vámosi。目前 LVGL 源码托管在 Github 平台上进行维护,在社区成员 满鉴霆 的推动下,RT-Thread 社区与 LVGL 社区已经完成了源码对接,LVGL 官方 Github 源码仓库已经成为 RT-Thread 的软件包,RT-Thread 社区小伙伴只需要使用 Env 工具或者 RT-Studio 即可拉取到 LVGL 的最新源码,并自动加入到 RT-Thread 工程中。
RT-Thread软件包中的LVGL(Light and Versatile Graphics Library)是一个轻量级、多功能的嵌入式图形库。LVGL使用C语言编写,以实现最大的兼容性(与C++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计。作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,显著的优势使得LVGL蔚然成风,成为广大开发者在选择GUI时的第一选择。
LVGL的轻便性主要体现在只需要很少的硬件资源就可以运行。按照官网的对硬件资源的要求,支持16、32和64bit的Microcontroller or processor、>16MHz的主时钟频率、>64KB的Flash/ROM空间(推荐180KB以上)、>8KB的RAM(推荐24KB以上)、1帧的缓存空间,可以是MCU内部,外挂RAM或者显示驱动芯片、图形缓存只要求最低有一行的显存大小(一行的水平分辨率大小的显存)(推荐是1/10的显存大小)、最少需要C99以上的编译器、基于C语言(少量基于C++),指针、结构体、回调。
此外,LVGL支持任意分辨率的屏幕,从单色的显示到全彩的显示器都可以支持。
以上是关于RT-Thread软件包中LVGL的介绍,如需了解更多信息,建议查阅相关官方文档或咨询专业人士。
已经适配LVGL的BSP列表 | 讲解视频
RT-Thread 的两款模拟器均适配了 LVGL,你可以不需要开发板也可以在 RT-Thread 操作系统上运行 LVGL 图形库。在已经适配好的 BSP 中,用户一键即可完成 LVGL 的配置并生成工程,编译下载后,自动演示 LVGL 的例程。如何配置请参考文档或(及)讲解视频。
移植模板请参见 正点原子 STM32L475 潘多拉 | STM32F469 Discovery | 新唐系列
LVGL 的配置文件有三个:
配置文件名称 位置 功能 用户是否需要修改此文件
lv_conf_internal.h LVGL 侧 将用户未配置的功能设置为默认值 不需要
lv_rt_thread_conf.h LVGL 侧 接管与操作系统相关的配置(例如时基信号、内存等) 不需要
lv_conf.h RT-Thread 侧:参考 用户自定义配置 需要用户自行在具体 BSP 的 applications/lvgl 文件夹下创建
从上表中可以看出,虽然配置文件看起来三个很多,但是实际需要用户干预的只有最后一项,即用户需要在 BSP 的 applications 文件夹中创建一个 lvgl 文件夹,该文件夹就是用来放置 lvgl 相关文件的,内容如下:
文件名称 作用
lv_conf.h 用户自定义配置 LVGL 功能(该文件名不可以乱改)
lv_port_disp.c LVGL 显示屏对接文件,在 void lv_port_disp_init(void) 的函数内初始化与LVGL显示框架对接相关内容(该函数必须存在)。官方手册参考 | 移植参考
lv_port_indev.c LVGL 输入设备对接文件,在 void lv_port_indev_init(void) 的函数内初始化与LVGL输入设备框架对接相关内容(该函数必须存在)。官方手册参考 | 移植参考
用户界面初始化文件 在 void lv_user_gui_init(void) 函数内调用你想要初始化的函数(该函数必须存在),LVGL在初始化时会自动调用该函数。移植参考
自 RT-Thread 4.1.1 版本之后(含4.1.1),用户无需再创建 lv_port_disp.h 和 lv_port_indev.h 文件。
用户无需关心LVGL初始化的问题,LVGL会在设备上电时自动由RT-Thread初始化,同时也会自动调用 lv_port_disp_init、lv_port_indev_init 和 lv_user_gui_init来初始化用户的显示屏、输入设备驱动以及界面绘制函数。这些初始化的工作已经在 LVGL 侧的 lv_rt_thread_port.c 文件中自动初始化完成。
关于是否需要对接RT-Thread显示设备框架与触摸框架的问题,用户可以自由处理,如果不愿意对接RT-Thread显示和触摸框架,可以直接将驱动怼到LVGL侧的对接函数上也是没有问题的。移植参考
RT-Thread软件包中的LVGL社区是一个为开发者提供解决技术难题、提升开发技能的平台。在社区中,开发者可以提出问题、分享经验,并与其他同行互动。
如果你在RT-Thread软件包中的LVGL社区有提问需求,可以按照以下步骤操作:
请注意,RT-Thread社区是一个开源社区,成员们都是志愿者,他们可能无法立即回答你的问题,但请耐心等待,相信他们会尽力帮助你解决问题。同时,也要尊重社区规则和其他成员,保持良好的交流氛围。
如果遇到移植相关的问题请到 RT-Thread 社区论坛提问:1992152446@qq.com
如果遇到 LVGL 使用相关的问题请到 LVGL 社区论坛提问(请使用英文):
当然,我可以提供一些基本的RT-Thread软件包中LVGL库的代码示例。请注意,这些代码可能需要根据您的具体硬件配置进行修改。
这是一个创建一个基本按钮的示例:
#include <rtthread.h>
#include <lvgl/lvgl.h>
/* 创建一个按钮 */
static void btn_event_cb(lv_obj_t * btn, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
rt_kprintf("Button clicked.\n");
}
}
static void lv_demo(void)
{
/* 初始化LVGL */
lv_init();
/* 创建一个按钮对象 */
lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);
lv_obj_set_pos(btn, 10, 10); // 设置位置
lv_obj_set_size(btn, 120, 50); // 设置大小
lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_CLICKED, NULL); // 添加事件回调
lv_obj_t * label = lv_label_create(btn, NULL);
lv_label_set_text(label, "Click me"); // 设置标签文本
/* 处理LVGL任务 */
while(1) {
lv_task_handler();
rt_thread_mdelay(5);
}
}
int main(void)
{
/* RT-Thread初始化 */
rt_thread_init(&lvgl_thread, "lvgl", lv_demo, RT_NULL, &lvgl_stack[0], sizeof(lvgl_stack), LVGL_THREAD_PRIORITY, 10);
rt_thread_startup(&lvgl_thread);
return 0;
}
这段代码首先初始化LVGL,然后创建一个按钮,设置其位置和大小,然后添加一个事件回调以处理按钮点击事件。当按钮被点击时,它将打印一条消息到控制台。然后,主循环将调用lv_task_handler()
以处理LVGL的任务。请注意,你需要将此代码集成到你的RT-Thread项目中,并确保已经正确配置了LVGL软件包。具体细节可能会根据你的硬件和RT-Thread版本有所不同。建议参考LVGL和RT-Thread的官方文档来获取更详细的信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。