1. TouchGFX 概述:从入门到理解它的设计哲学

大家好,我是你们的讲师。今天咱们正式开始《TouchGFX 事件驱动开发实战》的第一章。

说实话,我最早接触 TouchGFX 是在一个工业手持设备的项目上。那时候团队还在用裸机轮询画界面,刷新率上不去,触摸响应也卡。后来换了 TouchGFX,整个体验完全不一样了。所以这一章,我想先带你搞清楚——TouchGFX 到底是什么?它凭什么能搞定复杂的嵌入式 GUI?

什么是 TouchGFX?

TouchGFX 是一个专为 资源受限的嵌入式设备 打造的图形用户界面框架。它由瑞典公司 Draupner Graphics 开发,2018 年被 STMicroelectronics 收购。说白了,它就是一套让你在 MCU 上跑出“手机级”流畅界面的工具链。

它的核心卖点就三个:

  • 硬件加速——充分利用 LTDC、DMA2D、Chrom-ART 等外设,把 CPU 从像素搬运中解放出来。
  • 事件驱动——不是傻傻地轮询,而是“有变化才刷新”,功耗和性能都更优。
  • 所见即所得——TouchGFX Designer 拖拽生成 UI,代码自动生成,你只需要关心业务逻辑。

我个人习惯把 TouchGFX 比作“嵌入式界的 Qt”。但它的体量更轻,对 RAM/Flash 的要求更低,而且原生支持 STM32 的硬件特性。

TouchGFX 的架构

嗯,这里要画重点了。TouchGFX 的架构分三层,我直接给你画出来:

TouchGFX 三层架构图 TouchGFX 三层架构 应用层(Application Layer) Screen、View、Presenter、Model 业务逻辑、界面切换、数据绑定 框架层(Framework Layer) 事件分发、渲染管线、动画引擎、字体/图片管理 MVP 架构、消息队列、定时器 硬件抽象层(HAL Layer) LCD 驱动、触摸驱动、DMA2D、LTDC、FMC OSAL(操作系统抽象层)、内存管理 数据流方向:用户触摸 → HAL 上报 → 框架分发 → 应用响应 → 框架渲染 → HAL 刷屏

你看,从上到下:

  • 应用层:你写的业务代码都在这里。Screen 管理界面元素,Presenter 处理交互逻辑,Model 存数据。我习惯把 Model 做得薄一点,只放状态,不放逻辑。
  • 框架层:TouchGFX 的核心。事件怎么分发?动画怎么插值?文字怎么渲染?都是它干的。你不需要改它,但得理解它。
  • 硬件抽象层:跟芯片打交道的部分。换屏、换触摸芯片、换 MCU,都只改这一层。我在项目中遇到过因为 HAL 层时序没配好导致屏幕闪烁的问题,后来发现是 DMA2D 的 FIFO 阈值设错了。

避坑指南:我曾经在移植 TouchGFX 到非 STM32 平台时,发现 HAL 层的帧缓冲地址没对齐到 32 字节,结果画面撕裂。后来强制用 __attribute__((aligned(32))) 搞定。记住,硬件抽象层是性能瓶颈的高发区。

TouchGFX 的应用场景

你可能会问:这东西到底能用在哪?我列几个典型的:

领域 典型设备 为什么选 TouchGFX
工业 HMI PLC 面板、变频器屏幕、数据采集终端 实时性高、资源占用低、支持 7 寸以下屏
智能家居 智能音箱屏、温控面板、门禁对讲 动画流畅、开发周期短、支持 OTA 升级
医疗设备 监护仪、手持超声、输液泵 稳定可靠、通过医疗认证、低功耗
汽车电子 仪表盘、中控屏、空调控制面板 硬件加速、安全隔离、支持多图层
消费电子 智能手表、家电面板、玩具 免费商用(STM32 平台)、生态成熟

说白了,只要你的 MCU 带 LTDC 或 DMA2D,RAM 有 256KB 以上,Flash 有 1MB 以上,就能跑 TouchGFX。我见过最极端的案例是在 STM32F429 上跑 800x480 的界面,帧率还能稳定在 30fps。

TouchGFX 与裸机/其他 GUI 框架的对比

很多初学者会纠结:我到底用裸机画点,还是上 LVGL,还是上 TouchGFX?我直接给你一张对比表:

对比维度 裸机轮询 LVGL TouchGFX emWin
开发效率 极低,手写所有绘制 中等,C 代码配置 高,拖拽 + 代码生成 中等,GUI Builder 辅助
硬件加速 无 部分支持(DMA2D) 深度集成(LTDC/DMA2D/Chrom-ART) 部分支持(SEGGER 方案)
事件驱动 轮询,CPU 空转 回调 + 轮询混合 纯事件驱动,空闲休眠 消息驱动
RAM 占用 极低(几 KB) 中等(几十 KB) 较高(帧缓冲 + 缓存) 中等(可配置)
动画效果 自己实现,卡顿 内置,流畅 非常流畅,60fps 轻松 流畅,但配置复杂
学习曲线 低 中等 中等偏高(MVP 模式) 中等
免费商用 是 是(MIT 协议) 是(STM32 平台) 需付费授权

你想想看,裸机轮询就像你用手工画每一帧动画——累、慢、效果差。LVGL 像用积木搭房子——灵活但得自己拼。TouchGFX 则像用预制板盖楼——框架搭好,你只管装修。

注意:TouchGFX 虽然开发效率高,但它的 MVP 架构 需要你改变思维习惯。如果你习惯了裸机那种“想画就画”的方式,刚开始会觉得束手束脚。但相信我,一旦你理解了事件驱动的精髓,你会爱上这种“有变化才干活”的模式。

我个人建议:如果你的项目是 STM32 平台 + 彩色屏 + 需要流畅交互,直接上 TouchGFX。如果是低端 MCU 或黑白屏,LVGL 或裸机更合适。别为了用框架而用框架,工具要服务于需求。

好,这一章就到这里。你只要记住:TouchGFX 是一个为嵌入式 GUI 而生的、事件驱动的、硬件加速的框架。它的架构清晰,应用场景广泛,而且有 ST 官方背书。后面的章节,我会带你一步步深入它的内核。