LVGL的裁剪和配置

LVGL(Light and Versatile Graphics Library)是一个开源的图形库,用于嵌入式系统中的 GUI 开发。它具有强大的图形渲染能力,并通过配置文件 lv_conf.h 实现高度可裁剪性与定制性。

🧩 一、LVGL 的裁剪机制(模块裁剪)

LVGL 通过 宏开关裁剪不需要的模块和功能,以减小代码体积、提升性能,非常适合资源受限的嵌入式系统。

📌 核心思路:

你只需要在 lv_conf.h 文件中开启或关闭对应的宏,就可以启用或裁剪模块、组件、特性。

🔧 裁剪类型:

图形对象

LV_USE_BTN

控制是否启用按钮(Button)控件

特性功能

LV_USE_ANIMATION

控制是否启用动画功能

字体配置

LV_FONT_MONTSERRAT_12

裁剪不用的字体

图像解码器

LV_USE_PNG

,

LV_USE_BMP

是否支持各种图片格式

输入设备

LV_USE_INDEV

控制是否启用触摸等输入设备支持

日志

LV_USE_LOG

是否启用日志输出功能

文件系统

LV_USE_FS_STDIO

控制是否启用文件系统相关功能

⚙️ 二、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)

支持多种主题,可以设定默认颜色主题。

✂️ 三、如何裁剪与配置流程

  1. 复制模板文件:
  2. 修改项目 include 路径:确保 lv_conf.h 在包含路径中 优先于 LVGL 内部路径。
  3. 按需修改开关:禁用不使用的控件(如 LV_USE_CALENDAR 0)禁用日志、动画、阴影等特性使用适配分辨率的缓冲区大小
  4. 重新编译生效

🛠 示例:用于 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保姆级教程 文章被收录于专栏

本专栏专为嵌入式开发者打造,带你从零开始系统掌握 LVGL 图形库。内容涵盖源码获取、目录结构解析、控件使用、事件系统、主题样式、屏幕适配到平台移植。每一节图文并茂,配套实战项目与源码讲解,真正做到手把手教学,适合STM32/ESP32 等平台用户入门与进阶。跟着学,一步到位玩转 LVGL!

全部评论

相关推荐

迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务