lvgl开发-2.显示设备的移植

lvgl开发-2.显示设备的移植

对接初始化API

我们需要把LCD的文件对接到LVGL的函数里面去。

首先是lv_port_disp——template.c文件

1
2
3
4
5
6
/*Initialize your display and the required peripherals.*/
static void disp_init(void)
{
LCD_Init();
/*You code here*/
}

这一部分是显示设备的初始化。我们把LCD的初始化包进去。

屏幕大小部分我们在lv_conf.h文件配置过就不需要修改了。由于宏定义这一部分不会被编译。

修改刷新API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*Flush the content of the internal buffer the specific area on the display.
*`px_map` contains the rendered image as raw pixel map and it should be copied to `area` on the display.
*You can use DMA or any hardware acceleration to do this operation in the background but
*'lv_display_flush_ready()' has to be called when it's finished.*/
static void disp_flush(lv_display_t * disp_drv, const lv_area_t * area, uint8_t * px_map)
{
if(disp_flush_enabled) {

/*my code start*/
LCD_Fill(area->x1, area->y1, area->x2, area->y2, (u16)* px_map);
/*my code end*/
}
/*IMPORTANT!!!
*Inform the graphics library that you are ready with the flushing*/
lv_display_flush_ready(disp_drv);
}

这里将LCD清屏的函数对接进去了。

显示测试

在lv_conf.h文件修改DEMO使用的宏定义。如:

1
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 1

之后再改回来。

将startup文件的stacksize改大点。本来是400

1
Stack_Size      EQU     0x00000800

我们在RCT6的显示屏没有输入功能,所以我们换成别的DEMO。

注意的是,在配置中出现了内存不足的报错,我们的大小还需要修改。我们修改lv_conf.h里面的参数。

找到如下代码进行修改。可以看到它需要大于2KB的内存申请,修改成大于他就行了。

1
2
3
#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN
/** Size of memory available for `lv_malloc()` in bytes (>= 2kB) */
#define LV_MEM_SIZE (16U * 1024U) /**< [bytes] 原来是:64*1024u*/

改完后编译成功可以下载,下载后发现全屏幕花屏。

该问题出现在初始化中,我们在初始化时,加上一条全屏幕覆盖白色背景即可,因为不设置默认是乱码显示。

完成后跑例程,出现图形花屏,而不是全屏花屏。
花屏.jpg

解决方法: 把颜色深度降低一档

1
2
/** Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888) */
#define LV_COLOR_DEPTH 8

移植成功,但是感觉字体还是有些模糊,不清楚怎么回事

成功

感觉RCT6的内存想同时跑RTOS和LVGL有点困难。。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1186703947@qq.com

💰

×

Help us with donation

相册 动态菜单1