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 的架构分三层,我直接给你画出来:
你看,从上到下:
- 应用层:你写的业务代码都在这里。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 官方背书。后面的章节,我会带你一步步深入它的内核。