1. LVGL 概述与环境搭建

大家好,我是你们这趟 LVGL 移植之旅的向导。做嵌入式 UI 有些年头了,踩过的坑、填过的土,今天都拿出来跟你们聊聊。

先说说 LVGL 是什么。全称是 Light and Versatile Graphics Library,轻量级、多功能的图形库。说白了,就是一套专门给嵌入式设备用的 GUI 框架。你想想看,MCU 资源就那么点,跑不了 Qt,也跑不了 Android,但你又想做个漂亮的界面——这时候 LVGL 就派上用场了。

我最早接触 LVGL 是在一个智能家居项目里。客户要求 3 天出原型,用传统点屏方式根本来不及。后来用了 LVGL,两天就把主界面搭完了。嗯,从那以后我就成了它的忠实用户。

1.1 为什么选择 LVGL

市面上的嵌入式 GUI 方案不少,比如 emWin、TouchGFX、LittlevGL(LVGL 的前身)。为什么我推荐 LVGL?

特性 LVGL emWin TouchGFX
开源协议 MIT(免费商用) 商业授权 部分免费
内存占用 RAM > 8KB 即可 RAM > 16KB RAM > 32KB
控件丰富度 30+ 内置控件 20+ 25+
社区活跃度 GitHub 12k+ Star 闭源 中等
学习曲线 平缓 中等 较陡

你看这个表格就清楚了。LVGL 最大的优势是 MIT 协议,商用不花钱。我在一个量产项目里用过 emWin,光授权费就花了好几万。换成 LVGL,这笔钱直接省了。

另外它的内存要求极低。8KB RAM 就能跑起来,这在 STM32F103 这种老芯片上都能玩得转。我有个同事用 STM32F407 + 3.5 寸屏做温控器,LVGL 跑得飞起。

1.2 源码获取

获取 LVGL 源码很简单,去 GitHub 就行。

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

我个人习惯用 v8.3.x 系列,这个版本比较成熟,文档也全。v9.0 虽然新,但有些 API 变了,新手容易踩坑。

项目结构大概这样:

  • src/ — 核心源码,包括控件、绘图、输入设备等
  • examples/ — 官方示例,入门必看
  • docs/ — 文档,但建议直接看官网
  • lv_conf_template.h — 配置文件模板,移植时改这个
小技巧: 我建议你 fork 一份到自己的仓库,方便后续修改。别直接改原仓库,不然升级版本时很痛苦。

1.3 开发板选型建议

选开发板这事,我踩过不少坑。给你几个建议:

  • 入门级: STM32F407VET6 + 3.5 寸 320x480 屏。便宜、资料多、社区支持好。
  • 进阶级: ESP32-S3 + 4.3 寸 800x480 屏。带 Wi-Fi/蓝牙,适合物联网项目。
  • 高性能: i.MX RT1052 + 5 寸 1024x600 屏。跑 LVGL 丝滑流畅。

我曾经用 STM32F103C8T6(蓝 pill)跑 LVGL,虽然能点亮,但帧率只有 15fps,滑动卡顿。后来换了 F407,直接到 40fps。所以 主频最好 100MHz 以上,RAM 至少 64KB。

芯片型号 主频 RAM 推荐用途
STM32F103 72MHz 20KB 简单界面(不推荐)
STM32F407 168MHz 192KB 入门首选
ESP32-S3 240MHz 512KB 物联网项目
i.MX RT1052 600MHz 512KB 高性能应用

1.4 编译工具链安装

工具链这块,我分平台说。

Windows 用户

推荐用 STM32CubeIDE,它集成了 GCC 工具链和调试器,开箱即用。或者用 Keil MDK,但需要付费。

# 安装 ARM GCC 工具链(如果不用 IDE)
下载地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm
选择 .exe 安装包,一路下一步即可

Linux / macOS 用户

用包管理器安装:

# Ubuntu / Debian
sudo apt-get install gcc-arm-none-eabi

# macOS
brew install gcc-arm-embedded

安装完后验证一下:

arm-none-eabi-gcc --version
# 输出类似:arm-none-eabi-gcc (GNU Arm Embedded Toolchain) 10.3-2021.10
注意: 我曾经在 macOS 上装过 brew 版本,结果发现它默认不带 newlib-nano,导致编译 LVGL 时链接报错。后来改用 ARM 官方安装包才解决。建议新手直接用官方包。

1.5 知识体系总览

下面这张图,是我自己梳理的 LVGL 移植知识体系。你跟着这个路线走,不会迷路。

LVGL 移植知识体系 LVGL 移植知识体系 LVGL 移植 环境搭建 显示驱动 输入设备 性能优化 源码获取 开发板选型 工具链安装 framebuffer flush_cb 触摸屏 按键编码器 DMA加速 学习路线建议 先搞定环境搭建 → 再移植显示驱动 → 接入输入设备 → 最后做性能优化 每一步都有坑,我会在后续章节一一拆解

这张图把整个课程的知识结构串起来了。你会发现,环境搭建是基础中的基础。后面所有内容都建立在这个地基上。

1.6 本章小结

这一章我们聊了:

  • LVGL 是什么——轻量级嵌入式 GUI 库
  • 为什么选它——开源免费、内存占用低、控件丰富
  • 怎么获取源码——GitHub clone,用稳定版
  • 开发板怎么选——F407 入门,ESP32 做物联网,RT1052 上性能
  • 工具链怎么装——Windows 用 CubeIDE,Linux/macOS 用 ARM GCC

环境搭好了,下一章我们就开始真正动手移植。记住,工具链装好之后,先编译一下官方示例,确认环境没问题再往下走。我见过太多人跳过这一步,结果后面 debug 半天发现是工具链没装对。

核心要点: 环境搭建是移植工作的基石。花 30 分钟把工具链和源码准备好,后面能省 3 小时的 debug 时间。别问我怎么知道的——都是泪。