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 软件架构分层 应用层(Application Layer) Screen · Presenter · Model · 业务逻辑 框架层(Framework Layer) MVP 架构 · 事件分发 · 动画引擎 · 字体/图片管理 硬件抽象层(HAL Layer) LCD 驱动 · 触摸驱动 · DMA2D · 帧缓冲管理 硬件层(Hardware Layer) MCU · LCD 屏 · 触摸屏 · 外部存储器 数据流方向:应用层 → 框架层 → HAL 层 → 硬件层

你看,从上到下分了四层。我习惯把 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

我总结了几条判断标准,你可以对照自己的项目:

  1. MCU 是 STM32F4/F7/H7 系列——这是最理想的情况,驱动和 HAL 层都是现成的。
  2. 屏幕分辨率在 480×272 到 1024×600 之间——太小用不上 TouchGFX,太大内存扛不住。
  3. 需要流畅动画和触摸交互——比如智能家电、工业 HMI、医疗设备。
  4. 团队里有 UI 设计师——Designer 工具能让设计师直接参与开发,减少沟通成本。

反过来,如果你的项目只是显示几个数字、几个指示灯,用裸机画点或者 LVGL 就够了。杀鸡不用牛刀嘛。

一句话总结:TouchGFX 是 STM32 生态里最成熟的 GUI 方案,适合做「好看且流畅」的嵌入式界面。如果你用的是 STM32,闭眼入就对了。