1、GUI基础概念:什么是GUI、嵌入式GUI的特点、常见嵌入式GUI框架对比
大家好,我是老周。做嵌入式这行十几年了,今天咱们来聊聊GUI——图形用户界面。说白了,就是让屏幕能显示按钮、文字、图片,用户还能用手指或触摸笔去点、去滑。没有GUI的嵌入式设备,就像只有命令行的大哥大,能用,但不好用。
我刚开始做项目那会儿,用的还是12864点阵屏,自己画像素点。现在想想,真是硬核得不行。后来有了GUI框架,开发效率直接翻倍。所以,理解GUI基础概念,是咱们这门课的第一块基石。
1.1 什么是GUI?
GUI,全称Graphical User Interface,图形用户界面。它把计算机的操作从命令行搬到了图形上。你想想看,一个按钮、一个滑动条、一个输入框,用户一看就知道怎么用,不需要背命令。
在嵌入式领域,GUI通常包含这几个要素:
- 显示层:屏幕、像素、颜色、图层
- 交互层:触摸、按键、鼠标(很少用)
- 逻辑层:点击按钮后干什么、数据怎么刷新
- 资源层:字体、图片、图标、动画
嗯,这里要注意,嵌入式GUI和PC上的GUI不太一样。PC上你随便拖个控件,内存管够。但在MCU上,RAM可能只有几十KB,Flash也就几百KB。所以,嵌入式GUI的核心就是——在资源受限的环境下,跑出流畅的界面。
核心观点:嵌入式GUI不是把PC那套搬过来,而是为MCU量身定制的轻量级图形系统。
1.2 嵌入式GUI的特点
我做过一个项目,用STM32F103驱动一块320x240的TFT屏,跑LVGL。当时最头疼的就是内存。你想想看,320x240x16bit色深,一个帧缓冲就要150KB。而F103的RAM才64KB。怎么办?只能分块刷新、用局部缓冲。
嵌入式GUI的特点,我总结为以下几点:
| 特点 | 说明 | 我的经验 |
|---|---|---|
| 资源受限 | RAM/Flash小,CPU主频低 | 我曾经用8KB RAM跑过GUI,全靠分块刷新 |
| 实时性要求 | 界面响应不能卡顿,触摸要跟手 | 刷新率低于30fps,用户就会觉得卡 |
| 硬件多样性 | 不同屏幕、不同驱动IC、不同接口 | SPI屏、RGB屏、MIPI屏,驱动方式完全不同 |
| 功耗敏感 | 电池供电设备,GUI不能一直亮着 | 我习惯在无操作5秒后降低刷新率 |
| 开发工具链 | 不像PC有VS、Xcode那么成熟 | 很多框架的模拟器在PC上跑,但下到板子就崩 |
避坑指南:我曾经在一个项目里,直接用了PC上的字体文件,结果MCU的Flash装不下。后来才知道,嵌入式GUI必须用压缩过的字体格式,比如LVGL的字体转换工具生成的.bin文件。
1.3 常见嵌入式GUI框架对比
现在市面上主流的嵌入式GUI框架,我接触过的有四个:LVGL、TouchGFX、emWin、QT for MCU。每个都有自己的脾气。我一个个说。
1.3.1 LVGL(Light and Versatile Graphics Library)
LVGL是我个人用得最多的框架。开源、免费、社区活跃。它支持多种显示驱动和输入设备,控件丰富,动画流畅。最关键的是,它可以在很小的内存上跑。
- 内存需求:最低8KB RAM,32KB Flash
- 特点:开源、控件多、支持中文、有PC模拟器
- 适合场景:资源受限的MCU,比如STM32、ESP32
- 我的评价:入门快,坑少,社区文档全
1.3.2 TouchGFX
TouchGFX是ST公司主推的框架,和STM32深度绑定。它的UI设计工具很强大,可以拖拽生成界面。但商业使用需要授权。
- 内存需求:最低64KB RAM,256KB Flash
- 特点:设计工具强、动画流畅、硬件加速支持好
- 适合场景:STM32系列,尤其是带硬件加速的型号
- 我的评价:工具好用,但授权费不便宜
1.3.3 emWin(SEGGER)
emWin是老牌GUI框架,SEGGER出品。很多工业设备都在用。它稳定、高效,但不开源,需要购买授权。
- 内存需求:最低16KB RAM,64KB Flash
- 特点:稳定、高效、支持多种编译器
- 适合场景:工业控制、医疗设备
- 我的评价:稳定是最大优势,但开发效率不如LVGL
1.3.4 QT for MCU
QT for MCU是QT公司推出的轻量级版本。它把QT的QML和信号槽机制带到了MCU上。但资源消耗较大,适合高端MCU。
- 内存需求:最低128KB RAM,512KB Flash
- 特点:QML开发、信号槽机制、跨平台
- 适合场景:高端MCU,比如Cortex-M7、M4
- 我的评价:开发体验好,但硬件门槛高
个人建议:如果你刚开始学嵌入式GUI,我建议从LVGL入手。开源、免费、资料多。等你把LVGL玩熟了,再去看TouchGFX或emWin,会发现很多概念是相通的。
1.4 框架对比总览
为了让你看得更清楚,我整理了一张对比表:
| 框架 | 开源 | 最低RAM | 最低Flash | 设计工具 | 授权费用 | 适合芯片 |
|---|---|---|---|---|---|---|
| LVGL | 是 | 8KB | 32KB | 有(SquareLine Studio) | 免费 | STM32、ESP32、NXP等 |
| TouchGFX | 否 | 64KB | 256KB | 有(TouchGFX Designer) | 商业授权 | STM32为主 |
| emWin | 否 | 16KB | 64KB | 有(GUIBuilder) | 商业授权 | 通用MCU |
| QT for MCU | 部分 | 128KB | 512KB | 有(Qt Creator) | 商业授权 | 高端MCU |
为什么会这样?说白了,就是资源与功能的权衡。LVGL用更少的资源,提供了足够用的功能。而QT for MCU功能强大,但需要更多的硬件资源。你选哪个,取决于你的项目需求。
1.5 知识体系结构图
下面这张SVG图,帮你理清本章的知识脉络:
这张图把本章的知识点串起来了。从中心节点“嵌入式GUI”出发,分出四个分支:什么是GUI、嵌入式GUI特点、框架对比、选型建议。每个分支下面又有具体的子节点。你看着这张图,就能对本章内容有个整体把握。
学习建议:我建议你把这张图保存下来,学完本章后,试着不看图,自己画一遍。能画出来,说明你真的理解了。