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 什么是GUI 嵌入式GUI特点 框架对比 选型建议 显示层 交互层 逻辑层 资源层 资源受限 实时性要求 硬件多样性 功耗敏感 LVGL TouchGFX emWin QT for MCU 资源评估 功能需求 授权成本 社区支持 说明 嵌入式GUI的核心:在资源受限的环境下,提供流畅、易用的图形交互体验。

这张图把本章的知识点串起来了。从中心节点“嵌入式GUI”出发,分出四个分支:什么是GUI、嵌入式GUI特点、框架对比、选型建议。每个分支下面又有具体的子节点。你看着这张图,就能对本章内容有个整体把握。

学习建议:我建议你把这张图保存下来,学完本章后,试着不看图,自己画一遍。能画出来,说明你真的理解了。