1. TouchGFX 概述:什么是 TouchGFX?

各位同学,咱们今天聊聊 TouchGFX。说实话,我第一次接触这个框架是在一个智能家居项目上,当时客户要求界面要流畅、要炫酷,还得在资源有限的 MCU 上跑。嗯,那时候我就知道,传统的 LVGL 或者 emWin 虽然也能做,但想达到「手机级」的滑动跟手感,还真得靠 TouchGFX。

TouchGFX 是什么?说白了,它是一个专为 STM32 微控制器 打造的嵌入式 GUI 框架。它让你能在资源受限的硬件上,跑出接近智能手机的图形界面。你想想看,一个只有几百 KB RAM 的芯片,要处理动画、字体渲染、多点触控,没有专门的优化引擎根本做不到。

核心定义:TouchGFX 是一个基于 C++ 的硬件加速 GUI 框架,专为 STM32 系列 MCU 设计,利用 Chrom-ART 图形加速器和 LTDC 控制器实现高性能渲染。

1.1 TouchGFX 的发展历程

我记得 TouchGFX 最早是瑞典一家叫 Draupner Graphics 的小公司搞出来的。2014 年左右,他们推出了第一版,那时候还只支持少数 STM32 芯片。说实话,当时市面上主流的嵌入式 GUI 方案还是 emWin 和 uCGUI,TouchGFX 算是个小众玩家。

转折点发生在 2018 年。ST 半导体(意法半导体)直接把这公司收购了。为什么?因为 ST 发现自己的芯片在图形处理上越来越强,但缺一个能打的开箱即用 GUI 方案。收购之后,TouchGFX 直接免费了,还深度绑定了 STM32CubeMX 和 CubeIDE。

从那时起,TouchGFX 的版本迭代就快起来了:

版本 发布时间 关键变化
4.10 2018 被 ST 收购,开始免费
4.13 2019 加入 MVP 架构支持
4.18 2021 支持 8 位/16 位色彩深度
4.21 2023 引入自定义容器和高级动画
4.23 2024 优化内存管理,支持更多 STM32U5 系列

我个人觉得,4.18 版本是个分水岭。之前做低色深界面总觉得颜色断层严重,4.18 之后用 dithering(抖动算法)模拟高色深,效果好了不少。

1.2 TouchGFX 的核心优势

为什么我推荐大家学 TouchGFX?咱们一条条说。

  • 硬件加速:TouchGFX 直接调用 STM32 的 Chrom-ART 图形加速器。我在项目中做过对比,同样一个 480x272 的界面,用纯 CPU 刷屏大概 30fps,用 Chrom-ART 能跑到 60fps。差距是实打实的。
  • 低内存占用:它用了一种叫「帧缓冲压缩」的技术。说白了,就是只渲染变化的部分,不刷全屏。我曾经在一个只有 256KB RAM 的 STM32F429 上跑过 800x480 的界面,居然没爆内存。
  • 所见即所得的 UI 设计器:TouchGFX Designer 是个桌面工具,拖拽控件、设置动画、预览效果,都不用写一行代码。嗯,这里要注意,生成的代码质量很高,不是那种垃圾代码。
  • 丰富的控件库:按钮、滑块、图表、键盘、滚动列表……基本上你能想到的都有。而且支持自定义控件,我经常把公司的 Logo 做成自定义控件复用。
  • 完善的生态系统:和 STM32CubeMX 深度集成,生成初始化代码、配置时钟、引脚、LTDC 控制器,一键搞定。

避坑指南:我曾经在项目初期没注意 TouchGFX 的版本兼容性,用 4.18 的 Designer 生成了工程,结果芯片只支持 4.13 的运行时库,编译直接报错。后来我学乖了,每次建工程前先确认芯片支持的 TouchGFX 版本。

1.3 适用场景

TouchGFX 不是万能的。它最适合的场景,我总结了一下:

  • 智能家居面板:温控器、灯光控制、门禁对讲。这些设备需要漂亮的界面,但成本敏感,只能用 MCU。
  • 工业 HMI:PLC 人机界面、设备监控屏。要求稳定、响应快,TouchGFX 的硬件加速正好满足。
  • 医疗设备:监护仪、输液泵。需要高分辨率、高刷新率,而且 TouchGFX 通过了部分医疗认证。
  • 汽车仪表盘:虽然现在高端车用 Linux+Qt,但中低端车型的仪表盘、中控屏,TouchGFX 完全能胜任。
  • 消费电子:智能手表、家电屏幕。资源有限,但用户对 UI 流畅度要求高。

反过来,什么场景不适合?如果你需要跑复杂的 3D 渲染、视频解码,或者你的芯片不是 STM32 系列,那 TouchGFX 就不太合适了。

1.4 TouchGFX 知识体系总览

下面这张图,是我自己整理的 TouchGFX 学习路线。你跟着这个结构走,基本不会迷路。

TouchGFX 知识体系总览 TouchGFX 核心 框架与架构 UI 设计器 硬件适配层 MVP 模式 屏幕管理 控件库 动画系统 LTDC / DMA2D 驱动 移植实战:从 CubeMX 配置到硬件运行 产品级 GUI 交付 说明:本课程将按照此结构,从框架原理到硬件移植,逐步带你上手 TouchGFX

注意:很多初学者一上来就打开 TouchGFX Designer 拖控件,结果生成的代码不知道怎么烧到板子上。我建议你先理解框架的 MVP 架构和屏幕管理机制,再动手做 UI。否则后面移植的时候,你会被各种编译错误搞疯。

1.5 为什么选择 TouchGFX 而不是其他方案?

你可能想问:市面上有 LVGL、emWin、Qt for MCU,为什么偏偏学 TouchGFX?

我个人的看法是这样的:

  • LVGL 开源免费,社区活跃,但它的渲染性能依赖 CPU,没有硬件加速。在 STM32 上跑复杂界面,帧率上不去。
  • emWin 老牌 GUI,稳定,但收费,而且 UI 设计器不如 TouchGFX 好用。
  • Qt for MCU 功能强大,但资源占用高,入门门槛也高。
  • TouchGFX 免费、硬件加速、设计器好用、和 STM32 生态无缝集成。说白了,如果你用 STM32 做带屏产品,TouchGFX 是最省心的选择。

嗯,当然,如果你用的是非 ST 的芯片,比如 NXP、瑞萨,那 TouchGFX 就不支持了。这时候可以考虑 LVGL 或者 emWin。