lvgl
概述
- 支持抗锯齿
- 最小内存要求(64k flash,16k RAM)
- 单缓冲设备就可以呈现高级特效
- 使用C语言编写
- 支持PC模拟器
- 支持响应式布局,适应不同分辨率的显示设备
- 提供在线离线文档
- 基于自由和开源的MIT协议
硬件要求
- MCU主频最好高于16MHZ
- 如果只使用核心组件,至少需要64K ROM,完整使用需要180K ROM以上
移植
- 总共分为如下8个步骤
1.准备素材
2.修改Keil工程名
3.导入littleVGL库到Keil中
4.修改lv_conf.h和lv_ex_conf.h配置文件
5.添加定时器,为littleVGL提供心跳节拍
6.移植底层显示驱动
7.移植底层触摸驱动
8.移植官方的演示例程

- 添加src目录下所有.c文件到工程中

- lvgl配置文件模板复制一份到工程的头文件路径下

- 加大工程项目的栈空间到2kB(0x800)、使能C99编译支持
lv_config.h配置文件修改
- 修改lvgl支持的最大分辨率


- 内存管理大小设置

- 关闭使用GPU

- 关闭文件系统

- 开启主题

- 开启字体(默认16号字体)

lv_ex_conf.h是只有在测试官方例程和PC模拟器时需要,使能里面所有的宏。

添加定时器,为lvgl提供节拍
设置定时器每隔 1ms 进入中断,为 littleVGL 提供 1ms 的心跳节拍。

定时器配置的是1ms,lvgl节拍函数就传参数1进去,是几ms就传参数几。

- 调用lvgl的初始化函数

移植完成,可以开始编译。会报传参类型不对,状态不可达,定义变量但未使用的300多个警告。可以不管或者在编译器中屏蔽这三类警告。
屏蔽某类警告方法:–diag_suppress=xx警告编号
移植显示驱动

display:显示接口、fs:文件系统接口、indev:输入设备接口,包括触摸板。

拷贝接口模板单独放到lvgl_drvier文件夹下(将template后缀修改为自己的硬件平台名字),fs文件系统的移植接口可以不拷贝。
- lvgl缓存设置

16位颜色深度全屏缓存实际大小计算:分辨率w * 分辨率h * 16bit / 8。
lvgl要求至少10倍水平分辨率的大小的缓存。

- lvgl刷新函数示例

画点环线函数最好使用DMA减少CPU的运行时间。
触摸驱动移植
lv_port_indev.h 因为lvgl支持很多种输入设备,这个模板文件中只需保留触摸板相关的函数即可。
1 |
|
测试官方例程
最后在main函数中调用下显示和触摸驱动的初始化函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 int main(void)
{
.....
lv_init(); //lvgl系统初始化
lv_port_disp_init(); //lvgl显示接口初始化,放在lv_init()的后面
lv_port_indev_init(); //lvgl输入接口初始化,放在lv_init()的后面
/* 测试官方例程 */
demo_create();
lv_test_theme_1(lv_theme_night_init(210, NULL));
lv_test_theme_2();
while (1)
{
lv_task_handler(); // lvgl loop function
}
}


- 本文作者: 龙兄嵌入式
- 本文链接: https://hexo.880755.xyz/1970/01/01/zblog/download/110.lvgl的移植/