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的绑定,体现在三个层面:
- 芯片绑定:只支持STM32系列(F4、F7、H7、L4+、G0/G4等)。其他厂商的MCU?门都没有。
- 工具链绑定:TouchGFX Designer生成的代码,直接对接STM32CubeMX的初始化配置。你换IAR或Keil没问题,但底层HAL库必须是ST的。
- 许可证绑定:免费使用的前提是——你的主控芯片是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的核心模块和它们之间的关系。
这张图你看懂了吗?从上到下,应用层只管UI逻辑,框架层提供组件和动画,硬件抽象层负责对接STM32的底层驱动,硬件层就是实际的芯片和屏幕。每一层都依赖下一层,不能跳级。
我个人觉得,TouchGFX最大的价值在于“硬件抽象层”和“硬件层”的深度耦合。别的框架在HAL层做兼容,TouchGFX在HAL层做加速。这就是它和LVGL最本质的区别。
3.6 本章小结
好了,关于TouchGFX的初探就到这里。我们回顾一下:
- 它从瑞典小公司起家,被ST收购后成为STM32生态的官方GUI。
- 核心设计理念是“硬件加速优先”,依赖DMA2D、LTDC等外设。
- 深度绑定ST生态,既是优势(性能好、工具链统一),也是枷锁(换芯片成本高)。
- 许可证模式清晰:用STM32免费,不用就付费。