一、前言
随着物联网设备和智能终端的发展,越来越多的嵌入式设备开始追求精美的 GUI 界面。 但 MCU 资源有限,如何在几百 KB 的 Flash 和几十 KB 的 RAM 上跑出流畅的界面?
传统方案:
- Qt、GTK+ → 功能强大,但太重,MCU 带不动
- TouchGFX → 功能不错,但封闭,移植灵活性差
- LVGL → 轻量 + 高效 + 开源 + 社区活跃,适合各类嵌入式场景
结论:如果你要在 STM32、ESP32、NXP、Linux 上做 GUI,LVGL 是首选!
二、LVGL 简介
1. 什么是 LVGL?
LVGL(Light and Versatile Graphics Library)是一款开源的轻量级嵌入式 GUI 框架,主要用于低功耗 MCU、RTOS 和小型 Linux 系统。
- 官方网站:https://lvgl.io
- 源码仓库:https://github.com/lvgl/lvgl
2. LVGL 特点
| 特点 | 说明 |
|---|---|
| 轻量高效 | 在 STM32F4(180MHz)+ 64KB RAM 上,依然能实现 60FPS 流畅动画 |
| 跨平台 | 支持 MCU、RTOS、Linux、Windows、ESP32、Raspberry Pi |
| 功能强大 | 内置按钮、滑条、表格、图表、动画、触控支持 |
| 高度可定制 | 开关各种功能、颜色深度、缓存策略 |
| 生态完善 | SquareLine Studio、LVGL Simulator、丰富 Demo |
三、LVGL 架构原理
一句话总结:LVGL 提供 UI 组件和渲染引擎,但显示驱动和触摸驱动需要你移植。
1. 系统架构图
┌──────────────────────────────┐
│ 应用层 (UI 应用逻辑) │
└───────────▲──────────────────┘
┌───────────┴──────────────┐
│ LVGL 核心库 │
│ • 界面组件(按钮、列表) │
│ • 样式引擎(CSS-like) │
│ • 动画管理 │
│ • 事件驱动 │
└───────────▲──────────────┘
┌───────────┴──────────────┐
│ 显示驱动层 + 输入驱动层 │
│ • TFT/LCD 显示刷新 │
│ • 触摸/按键输入 │
└───────────▲──────────────┘
┌───────────┴──────────────┐
│ 硬件(MCU + LCD) │
└──────────────────────────┘
四、开发环境准备
| 项目 | 选择 |
|---|---|
| 硬件 | STM32F4/F7/H7、ESP32、NXP、RK 系列 |
| IDE | STM32CubeIDE / Keil / VSCode / PlatformIO |
| 操作系统 | 裸机 / FreeRTOS / RT-Thread |


