1. 课程导入

各位工程师朋友,咱们直接进入正题。LVGL 是什么?说白了,它就是嵌入式领域里一套开源的图形库,专门给那些资源受限的 MCU 用的。你想想看,一个只有几百 KB Flash、几十 KB RAM 的单片机,想跑个像样的界面,靠裸机画点画线?那得累死。LVGL 就是来解决这个问题的。

我个人第一次接触 LVGL 是在一个智能家居面板项目上。当时老板要求 3 天出原型,用传统方式写 UI 代码,光画个按钮就要半天。后来用了 LVGL,嗯,半天就把整个界面框架搭起来了。从那以后,我就再也没手写过像素级别的 UI 代码了。

为什么选择 LVGL

市面上的嵌入式 GUI 方案不少,比如 emWin、TouchGFX、LittlevGL(LVGL 的前身)。但 LVGL 有几个点特别打动我:

  • 开源免费:商业项目不用交授权费,这点对初创公司太友好了。我曾经在一个项目里用过某商业 GUI 库,光授权费就花了 5 万美金,心疼啊。
  • 资源占用低:最低配置只要 64KB Flash 和 16KB RAM 就能跑起来。我手头有个 STM32F103 的老项目,Flash 只剩 32KB 了,硬是塞进去了一个精简版 LVGL。
  • 组件丰富:按钮、滑块、图表、键盘、动画……你能想到的 UI 元素,它基本都有。不用自己造轮子。
  • 社区活跃:GitHub 上 15k+ star,遇到问题搜一下基本都有答案。我当年踩过一个坑,在论坛发帖,2 小时就有人回复了。

核心优势对比:LVGL 在开源、资源占用、组件丰富度三个维度上,目前是嵌入式 GUI 领域的第一梯队。如果你做的是量产产品,选它基本不会错。

LVGL 在嵌入式领域的地位

这么说吧,现在做嵌入式带屏产品,十有八九用的是 LVGL。从智能手表到工业 HMI,从家电面板到医疗设备,到处都有它的影子。我去年参加一个嵌入式展会,逛了一圈,发现 70% 的展品界面都是 LVGL 做的。

为什么会这样?因为 LVGL 已经形成了一个完整的生态。有官方的 SquareLine Studio 做拖拽式设计,有丰富的第三方库支持,还有各种开发板的移植教程。说白了,它已经成了嵌入式 GUI 的事实标准之一。

对比项 LVGL emWin TouchGFX
开源 是 (MIT) 否 (商业) 部分开源
最低 Flash 64KB 128KB 256KB
最低 RAM 16KB 32KB 64KB
组件数量 30+ 20+ 25+
社区活跃度 高 低 中

开发板选型建议

选开发板这事,我踩过不少坑。刚开始做 LVGL 项目时,我随便买了一块便宜的开发板,结果发现 Flash 不够,跑个 demo 都卡。后来换了块带外部 RAM 的板子,才算是真正玩起来了。

我的建议是:

  • 入门级:STM32F429 系列,带 TFT-LCD 控制器,Flash 2MB,RAM 256KB。跑 LVGL 8.x 完全够用,价格 100 元左右。
  • 进阶级:ESP32-S3,Flash 16MB,PSRAM 8MB。适合做 WiFi 联网的智能设备,价格 50 元左右。
  • 量产级:全志 V3s,带硬件 2D 加速,适合做复杂动画。不过开发门槛稍高,适合有经验的团队。

个人经验:如果你刚开始学,建议买 STM32F429 的板子,资料最多,遇到问题好解决。别一上来就搞高端芯片,容易劝退。

SDK 与工具链安装

工具链这块,我习惯用 VS Code + PlatformIO,或者 STM32CubeIDE。下面以 STM32 为例,说说安装步骤:

  1. 安装 STM32CubeIDE:去 ST 官网下载,安装过程一路 Next 就行。注意选对操作系统版本。
  2. 安装 ARM GCC 工具链:如果不用 CubeIDE,可以单独装 gcc-arm-none-eabi。我一般用 10.3 版本,稳定。
  3. 安装 OpenOCD:用于调试和烧录。Windows 下建议用 xpack 版本,省心。
  4. 安装 Git:用来拉取 LVGL 源码。这个应该都有吧?

注意:工具链版本别追新。我去年用 gcc 12 编译 LVGL 8.3,结果报了一堆警告。后来换回 10.3,一切正常。稳定压倒一切。

源码获取与编译

源码获取很简单,直接 Git 拉取:

git clone https://github.com/lvgl/lvgl.git
cd lvgl
git checkout v8.3.0  # 建议用稳定版

编译的话,我习惯用 CMake。LVGL 官方提供了 CMake 支持,直接这样:

mkdir build
cd build
cmake ..
make -j4

如果你用的是 STM32CubeIDE,可以直接导入 LVGL 源码到项目里。具体做法是:

  1. 在 CubeIDE 中新建一个 STM32 项目。
  2. 把 lvgl 文件夹复制到项目根目录。
  3. 在工程设置中添加 lvgl 的 include 路径。
  4. 把 lvgl/src 下的所有 .c 文件添加到编译列表。

嗯,这里要注意一点:LVGL 的配置文件 lv_conf.h 需要你自己创建。你可以从 lvgl 目录下复制 lv_conf_template.h,改名为 lv_conf.h,然后根据你的硬件配置修改里面的宏定义。

避坑指南:我曾经在配置 lv_conf.h 时忘了改 LV_COLOR_DEPTH,默认是 32 位,结果我的屏幕只支持 16 位,显示出来全是花屏。折腾了半天才发现是这里的问题。所以拿到源码后,第一件事就是检查颜色深度和屏幕分辨率。

LVGL 知识体系总览

下面这张图是我自己整理的 LVGL 学习路线,你可以对照着看看自己现在在哪个阶段:

LVGL 知识体系总览 环境搭建 基础组件 布局系统 事件处理 动画系统 样式管理 字体与图片 输入设备 内存管理 多任务适配 性能优化 调试技巧 项目实战与量产 SquareLine Studio 本课程将按照这个路线,从环境搭建一直讲到量产部署

这张图把 LVGL 的学习分成了四个层次。第一层是基础,也就是咱们这章讲的环境搭建和基本概念。后面我们会一层层往上走,直到你能独立完成一个量产级的项目。

好了,环境搭建这块就讲这么多。工具链装好、源码拉下来、编译通过,你就已经迈出了第一步。后面的事情,咱们慢慢来。