- TouchGFX :ST推出的嵌入式 GUI 框架,主要面向 STM32,提供可视化界面设计工具,适合做触摸屏、仪器仪表、工业控制等。
- emWin :SEGGER 推出的商业嵌入式 GUI 框架,发展较早,成熟稳定、资源占用较低,常用于工业设备、仪器仪表、医疗设备等。
- LVGL :开源的轻量级嵌入式 GUI 框架,支持 STM32、ESP32、NXP 等多种 MCU,控件丰富、跨平台,是目前比较主流的 MCU GUI 方案。
- Qt :一个功能非常强大的跨平台图形界面开发框架 ,主要用于 PC、Linux、Android 等,也有 Qt for MCUs 用于资源有限的嵌入式设备,适合复杂、高级的 UI。
TouchGFX → STM32 专用型 GUI
emWin → 成熟的商业型嵌入式 GUI
LVGL → 开源、轻量、跨平台 GUI
Qt → 功能强大的跨平台 GUI
| 方案 | 定位 | 优点 | 缺点 | 适合 |
|---|---|---|---|---|
| TouchGFX | STM32 专用 GUI | 和 STM32 结合好,性能高,设计器好用 | 基本绑定 STM32,生态不如 LVGL 开放 | STM32 产品 |
| emWin | 老牌商业 GUI | 成熟、稳定、工业产品多 | 商业授权、界面设计相对传统 | 工业仪器、成熟产品 |
| LVGL | 开源嵌入式 GUI | 免费、跨平台、生态活跃、资源占用低 | 部分高级设计需要自己实现 | STM32、ESP32、NXP 等 |
| Qt | 高级跨平台 GUI | UI能力最强、开发体验好、生态庞大 | 资源占用较高,对 MCU 要求高 | Linux、嵌入式高性能设备、复杂 HMI |
LVGL 的实现方式可以比较全面地分成 4 类,从"纯手写"到"可视化设计"都有。
1. 纯 C 代码开发
最传统的方式,直接使用 LVGL API 创建界面。
C代码
↓
创建 Screen / Button / Label / Chart
↓
设置位置、颜色、字体、事件
↓
LVGL运行
优点: 灵活、可控、适合动态界面。
缺点: UI复杂后代码量比较大。
2. XML 开发
LVGL 提供 XML 方式描述界面。
XML
↓
描述控件、布局、样式
↓
LVGL XML解析/构建
↓
界面
例如:
<button>
<label text="设置"/>
</button>
优点: UI结构清晰,适合页面较多的项目。
缺点: 需要学习 LVGL XML 语法。
3. 可视化设计工具
通过拖拽控件来设计界面。
目前主要可以考虑:
LVGL Pro
SquareLine Studio
基本流程:
拖拽设计
↓
设置控件属性
↓
设置页面/动画/事件
↓
生成 LVGL XML 或 C代码
↓
STM32工程
优点: 上手快,适合工业 HMI、480×800 这种复杂界面。
缺点: 某些特殊功能还是需要自己写 C 代码。
4. 第三方设计工具 + LVGL
比如使用:
Figma
Photoshop
Illustrator
先做视觉设计:
Figma
↓
UI视觉稿
↓
切图 / 图标 / 图片资源
↓
LVGL
↓
实现真正的交互界面
注意:
Figma 本身不能直接运行 LVGL。
它主要负责"设计长什么样",LVGL负责"在 MCU 上怎么运行"。
你可以把 LVGL 的实现方式总结成
LVGL
│
┌─────────────┼─────────────┐
↓ ↓ ↓
C代码 XML 可视化工具
│ │ │
手写UI 描述UI 拖拽设计UI
│ │
└──────┬──────┘
↓
LVGL
↓
STM32 / MCU
