RT-Thread LVGL触摸屏对接记录

电子说

1.3w人已加入

描述

LVGL(轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。

RT-Thread 目前已经支持 LVGL,4.1.1 版本之后(含4.1.1)移植 LVGL 的时候,只需要完善lv_conf.h 、lv_port_disp.c、 lv_port_indev.c 这三个文件即可,这三个文件的作用在后面介绍。

开始移植之前,需要检查使用的显示和输入设备是否已经有驱动支持,如果没有驱动支持的话需要自行对接,不对接到 RT-Thread 的设备框架,直接驱动也是可以的。

准备工作

这里默认显示和触摸的驱动已经没有问题,这次移植我使用的触摸屏显示芯片为 st7796 ,触摸芯片为 gt911 。

首先可以直接复制一个已经对接好的 LVGL 文件作为模板,再在此基础上进行修改,例如 rt-thread-masterbspstm32stm32l475-atk-pandoraapplicationslvgl ,结合板卡情况修改其中的lv_conf.h 、lv_port_disp.c、 lv_port_indev.c 三个文件即可, SConscript 自行按需修改。

LVGL 配置文件

lv_conf.h 为 lVGL 配置文件,其中需要配置一些显示器的主要参数,移植时至少要配置好一下三个选项

LV_HOR_RES_MAX 显示器的水平分辨率。
LV_VER_RES_MAX 显示器的垂直分辨率。
LV_COLOR_DEPTH 颜色深度,其取值对应如下:
8 - RG332
16 - RGB565
32 - (RGB888和ARGB8888)
对接显示接口
在lv_port_disp.c中对接 LVGL 的显示接口,根据已有的模板,最重要的是对接以下接口

/*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)
{
/
color_p is a buffer pointer; the buffer is provided by LVGL */
//在这里填入对应显示驱动的加载接口
//示例:
//lcd_load(area->x1, area->x2, area->y1, area->y2, color_p);
/*IMPORTANT!!!
Inform the graphics library that you are ready with the flushing /
lv_disp_flush_ready(disp_drv);
}
在注释的地方填入自己显示驱动的对应接口即可,需要注意传入的参数顺序和类型。

还需要初始化 lv_disp_buf_t 和 lv_disp_drv_t 变量,

对接触摸输入接口

在lv_port_indev.c中对接 LVGL 的输入接口,LVGL 支持多种类型的输入设备,例如触摸,键盘,编码器等,我这里使用的是触摸类型。

输入接口必须初始化 lv_indev_drv_t 变量,最重要的是实现其 read_cb 回调函数,从而获取触摸信息。其余具体配置可以查看:Input device interface — LVGL documentation

对接完成以后,记得检查 Kconfig 以及 scons 的相关配置。可以运行 demo 进行测试基本功能,例如触摸点是否准确,点击滑动等是否正常,显示刷新是否正常等。

需要提醒大家注意的一个点:确保触摸和显示的坐标是否对应。

可以看出只要显示和输入设备的驱动没有问题,对接 LVGL 是很快的。那么行动起来,让 LVGL 运行起来吧!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分