3. TouchGFX初探:历史、设计理念与生态绑定

说实话,我第一次接触TouchGFX是在2018年。那时候客户要求做一个带炫酷动画的仪表盘,LVGL还没现在这么成熟。我翻遍了资料,最后锁定了TouchGFX。当时它还是个瑞典小公司的产品,文档全是英文,社区也冷清。谁能想到几年后它被ST收购,成了STM32的“亲儿子”。

这一章,我们就来聊聊TouchGFX的来龙去脉。它的核心设计理念是什么?为什么和ST绑得这么紧?许可证到底怎么算?搞清楚了这些,你才能判断它适不适合你的项目。

3.1 TouchGFX的历史:从瑞典小公司到ST官方工具

TouchGFX的故事,得从2014年说起。

  • 2014年:瑞典公司TouchGFX AB发布第一版,主打高性能、低资源占用的GUI框架。当时主要面向高端ARM Cortex-M系列。
  • 2016年:推出TouchGFX Designer,一个可视化拖拽设计工具。这在嵌入式GUI圈子里算是个里程碑——以前大家都是手写代码调坐标,突然有了“画图”的方式。
  • 2018年:STMicroelectronics正式收购TouchGFX。我记得当时圈子里炸了锅,有人欢呼“终于有官方支持的GUI了”,也有人担心“会不会变成ST的专属玩具”。
  • 2019年至今:TouchGFX 4.x系列迭代,深度绑定STM32生态,免费开放给所有STM32用户。

关键转折点:ST收购TouchGFX后,框架的底层驱动直接对接STM32 HAL/LL库,硬件加速(LTDC、DMA2D、Chrom-ART)全部原生支持。说白了,你用STM32跑TouchGFX,性能就是比别人好一截。

我个人觉得,TouchGFX的历史就是“从独立工具到生态组件”的典型。它没有选择像LVGL那样保持中立,而是赌对了ST这条大腿。事实证明,这个选择很明智。

3.2 核心设计理念:硬件加速优先

TouchGFX的设计哲学,一句话就能概括:把硬件的潜力榨干。

它不像LVGL那样追求“跑在任意MCU上”,而是假设你的芯片有2D加速单元、有大容量显存、有高分辨率屏幕。在这个前提下,它把性能做到了极致。

3.2.1 帧缓冲与局部刷新

TouchGFX默认使用双缓冲或三缓冲机制。什么意思?

  • 单缓冲:一边画一边显示,容易撕裂。
  • 双缓冲:一个缓冲区在显示,另一个在后台绘制,画完再切换。流畅,但吃内存。
  • 三缓冲:再加一个缓冲区,让CPU和DMA2D可以并行工作。TouchGFX的默认推荐。

我在一个480x272的屏幕上做过测试,双缓冲需要480x272x2x2 ≈ 520KB(RGB565格式)。三缓冲直接飙到780KB。对于STM32F429这种带SDRAM的芯片还好说,但如果你用F103……嗯,基本没戏。

我的经验:如果你的MCU没有外部SDRAM,别硬上TouchGFX。我曾经在一个F746上跑TouchGFX,内部SRAM只有320KB,三缓冲根本塞不下。最后只能降级到单缓冲+局部刷新,但动画效果大打折扣。

3.2.2 硬件加速引擎

TouchGFX深度依赖ST的DMA2D(图形加速DMA)和LTDC(液晶显示控制器)。

硬件模块 TouchGFX利用方式 效果
DMA2D 图像混合、颜色填充、像素格式转换 CPU零负载,帧率翻倍
LTDC 直接驱动RGB接口屏幕,支持多层叠加 减少外部LCD控制器,降低BOM成本
Chrom-ART 硬件JPEG解码、图像旋转 大图加载不卡顿

说白了,TouchGFX的“快”不是靠算法优化,而是靠硬件堆出来的。你换个非ST的MCU,这些加速模块全没了,性能直接腰斩。

3.3 ST生态绑定:是优势也是枷锁

TouchGFX和ST的绑定,体现在三个层面:

  1. 芯片绑定:只支持STM32系列(F4、F7、H7、L4+、G0/G4等)。其他厂商的MCU?门都没有。
  2. 工具链绑定:TouchGFX Designer生成的代码,直接对接STM32CubeMX的初始化配置。你换IAR或Keil没问题,但底层HAL库必须是ST的。
  3. 许可证绑定:免费使用的前提是——你的主控芯片是STM32。如果换成其他芯片,对不起,请付费。

避坑指南:我曾经有个客户,产品原型用STM32H743跑TouchGFX,一切顺利。结果量产时芯片缺货,想换成国产替代。一查,TouchGFX许可证不允许。最后只能重写UI,换成LVGL,工期延误了两个月。所以,如果你对芯片供应链没把握,慎选TouchGFX。

为什么ST要这么绑?说白了,商业策略。ST通过TouchGFX把开发者牢牢锁在自己的生态里。你习惯了TouchGFX的拖拽设计、硬件加速、流畅动画,就很难再切换到其他平台。这就是“生态护城河”。

3.4 许可证模式:免费与付费的边界

TouchGFX的许可证,很多人搞不清楚。我直接给你画个表:

使用场景 许可证类型 费用 限制
STM32芯片上开发 ST许可协议 免费 无(闭源商用均可)
非STM32芯片上开发 商业许可 付费(按年/按项目) 需联系TouchGFX销售
个人学习/评估 评估许可 免费 不可商用,不可分发

注意几个关键点:

  • “免费”只针对STM32。你拿TouchGFX做产品,只要芯片是STM32,闭源商用都没问题。
  • “免费”不包括TouchGFX Designer的某些高级功能(比如自定义控件模板),但这些一般用不到。
  • 如果你把TouchGFX移植到GD32、AT32、NXP等芯片上,必须购买商业许可。价格嘛……我听说一年几万到十几万人民币不等,具体得谈。

一句话总结:用STM32,TouchGFX就是免费的;不用STM32,TouchGFX就是收费的。没有灰色地带。

3.5 TouchGFX知识体系总览

为了让你对TouchGFX有个整体印象,我画了张图。这张图涵盖了TouchGFX的核心模块和它们之间的关系。

TouchGFX 知识体系总览 应用层(UI逻辑) TouchGFX 框架层 UI组件库 | 事件系统 | 动画引擎 | 字体/图片管理 硬件抽象层(HAL) 帧缓冲管理 | DMA2D驱动 | LTDC配置 | 触摸驱动 硬件层(STM32 + 外设) SDRAM | 显示屏 | 触摸屏 | DMA2D | LTDC 核心依赖:STM32 HAL库 + CubeMX配置 + 硬件加速单元 非STM32平台需购买商业许可,且无法使用DMA2D/LTDC加速

这张图你看懂了吗?从上到下,应用层只管UI逻辑,框架层提供组件和动画,硬件抽象层负责对接STM32的底层驱动,硬件层就是实际的芯片和屏幕。每一层都依赖下一层,不能跳级。

我个人觉得,TouchGFX最大的价值在于“硬件抽象层”和“硬件层”的深度耦合。别的框架在HAL层做兼容,TouchGFX在HAL层做加速。这就是它和LVGL最本质的区别。

3.6 本章小结

好了,关于TouchGFX的初探就到这里。我们回顾一下:

  • 它从瑞典小公司起家,被ST收购后成为STM32生态的官方GUI。
  • 核心设计理念是“硬件加速优先”,依赖DMA2D、LTDC等外设。
  • 深度绑定ST生态,既是优势(性能好、工具链统一),也是枷锁(换芯片成本高)。
  • 许可证模式清晰:用STM32免费,不用就付费。