一、
LVGL(轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。
主要特性
丰富且强大的模块化图形组件:按钮 (buttons)、图表 (charts)、列表 (lists)、滑动条 (sliders)、图片 (images) 等
高级的图形引擎:动画、抗锯齿、透明度、平滑滚动、图层混合等效果
支持多种输入设备:触摸屏、 键盘、编码器、按键等
支持多显示设备
不依赖特定的硬件平台,可以在任何显示屏上运行
配置可裁剪(最低资源占用:64 kB Flash,16 kB RAM)
基于UTF-8的多语种支持,例如中文、日文、韩文、阿拉伯文等
可以通过类CSS的方式来设计、布局图形界面(例如:Flexbox、Grid)
支持操作系统、外置内存、以及硬件加速(LVGL已内建支持STM32 DMA2D、NXP PXP和VGLite)
即便仅有单缓冲区(frame buffer)的情况下,也可保证渲染如丝般顺滑
全部由C编写完成,并支持C++调用
配合GUI Guider使用可以设计出精美图形界面
二、移植步骤
从LVGL开源****下载lvgl图形库源码
https://github.com/lvgl/lvgl/tree/release/v8.3
这里演示 lvgl v8.3版本的移植步骤
解压文件一览
图形库源码非常庞大,所以按应用需求来删去不需要使用的库文件
本次移植的文件主要有:
源码库根目录的demos、examples、src这三个文件夹,lv_conf_template.h、lvgl.h两个头文件
在examples目录删去除porting外的所有文件夹,这是显示相关的驱动库
为了便于工程管理,需要将文件的名称后缀_template删除,包括examples/porting目录下的文件
LVGL根目录文件结构
porting文件结构
以上移植文件统一放置在LVGL文件夹内
将该文件夹复制到CubeIDE的APP工程目录下
为工程添加LVGL的头文件路径
源文件导入
三、程序修改
在main.c包含头文件
#include "lvgl.h" #include "lv_port_disp.h" #include "lv_demo_stress.h"
添加LVGL运行所需的心跳包
main函数处执行代码
//LCD初始化 bsp_lcd_test(); //LVGL Demo演示 lv_init(); lv_port_disp_init(); lv_demo_stress(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ lv_timer_handler(); } /* USER CODE END 3 */ }
其他文件修改,examples/porting/lv_port_disp.c
增加宏定义屏幕尺寸宽为800,高度480
搜索disp_flush函数,这个函数用于屏幕像素数据刷新
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { if(disp_flush_enabled) { /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/ int32_t x; int32_t y; for(y = area->y1; y <= area->y2; y++) { for(x = area->x1; x <= area->x2; x++) { /*Put a pixel to the display. For example:*/ /*put_px(x, y, *color_p)*/ LCD_DrawPixel(x,y,color_p->full);//添加该行代码,为LCD驱动的绘点函数 color_p++; } } } /*IMPORTANT!!! *Inform the graphics library that you are ready with the flushing*/ lv_disp_flush_ready(disp_drv); }
只需添加LCD_DrawPixel(x,y,color_p->full);
搜索disp_init函数,这个函数用于执行LCD屏幕的初始化
由于我在main.c文件已经执行过LCD屏幕初始化,所以disp_init函数没有修改,保持默认
编译无误后烧录固件至开发板
四、实验结果
LVGL的stress测试例程可以运行