LVGL的裁剪和配置
LVGL(Light and Versatile Graphics Library)是一个开源的图形库,用于嵌入式系统中的 GUI 开发。它具有强大的图形渲染能力,并通过配置文件 lv_conf.h
实现高度可裁剪性与定制性。
🧩 一、LVGL 的裁剪机制(模块裁剪)
LVGL 通过 宏开关裁剪不需要的模块和功能,以减小代码体积、提升性能,非常适合资源受限的嵌入式系统。
📌 核心思路:
你只需要在 lv_conf.h
文件中开启或关闭对应的宏,就可以启用或裁剪模块、组件、特性。
🔧 裁剪类型:
图形对象 |
| 控制是否启用按钮(Button)控件 |
特性功能 |
| 控制是否启用动画功能 |
字体配置 |
等 | 裁剪不用的字体 |
图像解码器 |
,
等 | 是否支持各种图片格式 |
输入设备 |
| 控制是否启用触摸等输入设备支持 |
日志 |
| 是否启用日志输出功能 |
文件系统 |
等 | 控制是否启用文件系统相关功能 |
⚙️ 二、lv_conf.h 配置文件详解
lv_conf.h
是 LVGL 的主配置文件,位于项目中(非库中),通常在使用 CMake、Makefile 或 STM32CubeMX 时会自动复制模板。
🌟 配置结构大致如下:
1. 版本检查
#define LVGL_VERSION_MAJOR 9 #define LVGL_VERSION_MINOR 0
确保 lv_conf.h
与当前使用的 LVGL 版本匹配。
2. 屏幕、颜色、缓冲设置
#define LV_COLOR_DEPTH 16 // 颜色位深:8/16/24/32 #define LV_COLOR_16_SWAP 0 // RGB565 是否交换字节序 #define LV_HOR_RES_MAX 480 // 屏幕最大水平分辨率 #define LV_VER_RES_MAX 320 // 屏幕最大垂直分辨率 #define LV_BUF_SIZE (LV_HOR_RES_MAX * 10)
✅ 建议根据你的屏幕尺寸和内存调整缓冲区大小。
3. 图形模块使能
#define LV_USE_BTN 1 // 按钮控件 #define LV_USE_LABEL 1 // 标签控件 #define LV_USE_SLIDER 0 // 滑块控件(不需要可以关闭) #define LV_USE_CANVAS 1 // 自绘画布
4. 字体配置
#define LV_FONT_MONTSERRAT_12 1 // 启用12号字体 #define LV_FONT_DEFAULT &lv_font_montserrat_12
你也可以使用自己生成的 .c
字体文件,或者通过 LVGL 提供的字体转换器在线生成。
5. 特性开关
#define LV_USE_LOG 1 #define LV_USE_ANIMATION 1 #define LV_USE_SHADOW 0 #define LV_USE_LINE 1 #define LV_USE_ARC 0
关闭动画、阴影、某些图元可以有效减小内存占用。
6. 输入设备与文件系统支持
#define LV_USE_INDEV 1 // 是否启用输入设备(触摸) #define LV_USE_FS_STDIO 1 // 是否启用标准C文件系统 #define LV_USE_FS_FATFS 0 // 是否启用 FATFS 文件系统
7. 图像支持
#define LV_USE_IMG 1 #define LV_USE_PNG 1 #define LV_USE_JPG 0
使用图片资源时,只启用你需要的格式(例如 PNG),避免额外占用。
8. 主题设置
#define LV_USE_THEME_DEFAULT 1 #define LV_THEME_DEFAULT_DARK 0 #define LV_THEME_DEFAULT_COLOR_PRIMARY lv_palette_main(LV_PALETTE_BLUE)
支持多种主题,可以设定默认颜色主题。
✂️ 三、如何裁剪与配置流程
- 复制模板文件:
- 修改项目 include 路径:确保 lv_conf.h 在包含路径中 优先于 LVGL 内部路径。
- 按需修改开关:禁用不使用的控件(如 LV_USE_CALENDAR 0)禁用日志、动画、阴影等特性使用适配分辨率的缓冲区大小
- 重新编译生效
🛠 示例:用于 STM32 的简化配置片段
#define LV_COLOR_DEPTH 16 #define LV_HOR_RES_MAX 240 #define LV_VER_RES_MAX 320 #define LV_USE_LOG 0 #define LV_USE_ANIMATION 0 #define LV_USE_BTN 1 #define LV_USE_SLIDER 0 #define LV_USE_IMG 1 #define LV_USE_PNG 1 #define LV_FONT_MONTSERRAT_12 1 #define LV_FONT_DEFAULT &lv_font_montserrat_12
📚 小技巧与建议
- 使用 LVGL 在线字体生成器 生成最小化字体资源
- LCD 较小时建议使用
8~16
位颜色深度 - 可以写多个
lv_conf_*.h
文件用于不同项目快速切换 - 编译后可查看最终代码体积与 RAM 占用变化以评估裁剪效果
本专栏专为嵌入式开发者打造,带你从零开始系统掌握 LVGL 图形库。内容涵盖源码获取、目录结构解析、控件使用、事件系统、主题样式、屏幕适配到平台移植。每一节图文并茂,配套实战项目与源码讲解,真正做到手把手教学,适合STM32/ESP32 等平台用户入门与进阶。跟着学,一步到位玩转 LVGL!