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 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。