1. TouchGFX 概述:从零认识这个 GUI 框架
说实话,我第一次接触 TouchGFX 是在一个智能家居项目上。当时老板扔过来一块 STM32F429 开发板,说「三天内把界面跑起来」。我盯着那个 320×240 的屏幕,心想:用裸机画像素点,三天连个按钮都画不完。
后来同事推荐了 TouchGFX。嗯,真香。
1.1 什么是 TouchGFX
TouchGFX 是一个嵌入式 GUI 框架。说白了,它帮你把按钮、图表、滑动条这些东西画到屏幕上,而你只需要关心业务逻辑。
它由瑞典的 Draupner Graphics 公司开发,2018 年被 ST 收购了。所以现在它和 STM32 生态绑得很紧——你用 STM32 做项目,TouchGFX 基本是首选。
我个人的理解是:TouchGFX 像是一个「画图引擎 + 事件系统 + 动画引擎」的集合体。你不需要懂底层像素操作,也不需要管帧缓冲怎么刷新,框架全包了。
核心定位:面向资源受限的嵌入式设备,提供接近智能手机级别的 UI 体验。
1.2 TouchGFX 的架构
咱们先看一张架构图,把整体脉络理清楚。
你看,从上到下分了四层。我习惯把 TouchGFX 比作一个「管道」:应用层只管「我要显示一个温度计」,框架层负责「怎么画这个温度计」,HAL 层负责「怎么把像素刷到屏幕上」,硬件层就是「屏幕和 MCU 本身」。
1.3 TouchGFX 的核心优势
为什么选 TouchGFX?我列几个让我「路转粉」的点:
- 硬件加速开箱即用:STM32 的 LTDC、DMA2D、Chrom-ART 这些硬件,TouchGFX 直接帮你配好。我早期用 emWin 的时候,光调 DMA2D 就花了两天。
- 动画引擎很顺滑:60fps 的帧率,在 Cortex-M4 上就能跑。你想想看,一个 200MHz 的 MCU 跑出手机级别的滑动效果,这优化功底确实硬。
- 所见即所得的 UI 设计器:TouchGFX Designer 是桌面工具,拖拽控件、调颜色、配动画,生成代码直接烧进板子。我团队里有个 UI 设计师,完全不懂 C++,也能用 Designer 出界面。
- 内存占用可控:帧缓冲可以只用单缓冲、双缓冲甚至局部缓冲。对于 RAM 只有 256KB 的芯片,这很关键。
我的经验:如果你用 STM32F4/H7 系列,TouchGFX 的 DMA2D 加速几乎是「白送」的性能。记得在 HAL 初始化里把 DMA2D 时钟打开,帧率能翻倍。
1.4 TouchGFX 在嵌入式 GUI 中的地位
现在嵌入式 GUI 框架不少:LVGL、emWin、QT for MCU、LittlevGL……TouchGFX 排在哪?
我个人觉得,它属于「中高端专用」的定位。你看这张对比表:
| 框架 | 硬件绑定 | 动画性能 | 设计工具 | 内存需求 | 学习曲线 |
|---|---|---|---|---|---|
| TouchGFX | STM32 为主 | ★★★★★ | ★★★★★ | 中等 | 中等 |
| LVGL | 全平台 | ★★★★ | ★★★ | 低 | 低 |
| emWin | SEGGER 生态 | ★★★ | ★★★ | 低 | 高 |
| QT for MCU | QT 生态 | ★★★★ | ★★★★★ | 高 | 高 |
TouchGFX 的优势在于「开箱即用的高性能」。你不需要像 LVGL 那样手动调帧缓冲策略,也不需要像 emWin 那样啃上千页的参考手册。它把复杂的东西封装好了,让你专注于界面本身。
但它的短板也很明显:强绑定 STM32。虽然官方说支持其他 MCU,但我试过移植到 GD32 上,HAL 层改得想哭。所以如果你用非 ST 的芯片,LVGL 可能更合适。
避坑提醒:我曾经在一个项目里试图把 TouchGFX 移植到某国产 M4 芯片上。折腾了两周,最后发现 DMA2D 的寄存器布局和 ST 不完全兼容,帧缓冲刷新速度只有 15fps。后来老老实实换了 STM32F429,直接 60fps 稳如老狗。
1.5 什么时候该用 TouchGFX
我总结了几条判断标准,你可以对照自己的项目:
- MCU 是 STM32F4/F7/H7 系列——这是最理想的情况,驱动和 HAL 层都是现成的。
- 屏幕分辨率在 480×272 到 1024×600 之间——太小用不上 TouchGFX,太大内存扛不住。
- 需要流畅动画和触摸交互——比如智能家电、工业 HMI、医疗设备。
- 团队里有 UI 设计师——Designer 工具能让设计师直接参与开发,减少沟通成本。
反过来,如果你的项目只是显示几个数字、几个指示灯,用裸机画点或者 LVGL 就够了。杀鸡不用牛刀嘛。
一句话总结:TouchGFX 是 STM32 生态里最成熟的 GUI 方案,适合做「好看且流畅」的嵌入式界面。如果你用的是 STM32,闭眼入就对了。