1、TouchGFX入门:从零认识这个嵌入式GUI利器

1.1 TouchGFX到底是什么?

先问个问题:你做过嵌入式设备的界面开发吗?

如果你用过LCD屏、TFT彩屏,大概都经历过那种痛苦——自己画像素点、处理触摸事件、管理刷新逻辑。说白了,就是拿C语言硬怼一个图形界面。我早年做工业仪表时就是这么干的,一个简单的菜单页面,光重绘逻辑就写了上千行。

TouchGFX,就是来解决这个问题的。

它是一个专为嵌入式系统设计的图形用户界面(GUI)框架。你想想看,它帮你把界面渲染、触摸交互、动画过渡、字体管理这些脏活累活全包了。你只需要关注界面长什么样、用户怎么操作,底层怎么画到屏幕上去,TouchGFX替你搞定。

它的核心特点,我总结为三点:

  • 硬件加速:充分利用MCU的LTDC、DMA2D、Chrom-ART等外设,实现60fps流畅动画
  • 低资源占用:ROM可以小到几百KB,RAM几十KB就能跑起来
  • 所见即所得:用TouchGFX Designer拖拽设计,代码自动生成

一句话总结:TouchGFX = 嵌入式界的"前端框架",让你用写HTML的思路做嵌入式GUI。

1.2 TouchGFX发展史:从瑞典小公司到ST官方工具

TouchGFX的故事,其实挺有意思的。

它最早是瑞典一家叫TouchGFX AB的小公司开发的,2012年左右开始做。那时候嵌入式GUI市场还没现在这么热闹,主流的方案要么是uCGUI(后来叫emWin),要么是商业版的Embedded Wizard。TouchGFX当时主打的就是"硬件加速"和"流畅动画"这两个卖点。

我记得2016年我第一次接触TouchGFX 4.6版本,那时候它还不支持STM32以外的芯片。界面设计器也远没现在好用,很多控件得手写代码配置。但它的动画引擎确实惊艳——60fps的滑动切换,在当时的Cortex-M4上几乎看不到对手。

转折点在2018年。ST意法半导体收购了TouchGFX,把它变成了STM32的官方GUI工具。这一下子,TouchGFX的生态就起飞了:

时间节点 版本 关键变化
2012年 1.0 初创版本,仅支持特定硬件
2016年 4.6 引入Designer可视化设计工具
2018年 4.12 被ST收购,成为STM32官方工具
2020年 4.16 支持FreeRTOS、多语言、矢量字体
2023年 4.22 全面支持TouchGFX Generator、CubeMX集成

现在TouchGFX已经发展到4.23+版本,完全免费开源(前提是使用STM32芯片)。它的生态包括:TouchGFX Designer(拖拽设计)、TouchGFX Engine(运行时库)、TouchGFX Generator(代码生成器)。

1.3 应用场景:哪些项目适合用TouchGFX?

我这些年用TouchGFX做过不少项目,也踩过一些坑。说说它的典型场景:

  • 智能家居面板:温控器、智能开关、中控屏——这些设备需要漂亮的UI,但MCU资源有限
  • 工业HMI:PLC人机界面、设备监控屏——需要实时数据刷新、报警弹窗
  • 医疗设备:监护仪、注射泵——对稳定性和响应速度要求极高
  • 汽车仪表:数字仪表盘、中控娱乐——需要复杂的动画和仪表控件
  • 消费电子:智能手表、家电面板——追求视觉效果和用户体验

我的经验:如果你用的是STM32F4/H7系列,且屏幕分辨率在480x272到800x480之间,TouchGFX几乎是首选。但如果你的MCU是Cortex-M0或者RAM小于64KB,建议考虑更轻量的方案。

为什么会这样?因为TouchGFX虽然优化得很好,但它毕竟需要一定的硬件资源来支撑帧缓冲和动画计算。我曾在STM32F103上硬跑TouchGFX,结果帧率只有15fps,卡得没法用。

1.4 开发环境搭建:手把手教你配好环境

这部分我尽量说细一点。环境搭不好,后面全是坑。

1.4.1 你需要准备什么?

组件 推荐版本 说明
STM32CubeMX 6.10+ MCU配置、时钟、外设初始化
TouchGFX Designer 4.23+ 界面设计、代码生成
TouchGFX Generator 随Designer安装 CubeMX插件,自动生成TouchGFX工程
IDE IAR / Keil / STM32CubeIDE 编译、调试
开发板 STM32F429 / H743 / H750 带TFT屏的评估板

1.4.2 安装步骤(Windows环境)

  1. 安装STM32CubeMX:去ST官网下载,一路Next就行。注意安装路径不要有中文。
  2. 安装TouchGFX Designer:同样从ST官网下载。安装完成后,它会自动注册到CubeMX的插件列表里。
  3. 验证安装:打开CubeMX,在菜单栏看到"Tools → TouchGFX Generator"选项,说明安装成功。
  4. 安装IDE:我习惯用STM32CubeIDE,因为它和CubeMX集成最好。当然Keil和IAR也行。

避坑指南:我曾经因为先装了TouchGFX Designer后装CubeMX,导致插件注册失败。正确的顺序是:先装CubeMX,再装TouchGFX Designer。如果已经装反了,可以重新运行TouchGFX Designer安装程序,选择"Repair"修复。

1.4.3 创建第一个TouchGFX工程

嗯,这里我直接给步骤,你跟着做就行:

  1. 打开CubeMX,选择你的MCU型号(比如STM32F429ZIT6)
  2. 配置时钟:HSE + PLL,主频拉到最高(通常180MHz或以上)
  3. 配置LTDC外设:设置像素时钟、HBP/HFP/VBP/VFP等时序参数
  4. 配置FMC(如果使用外部SDRAM做帧缓冲)
  5. 在"Pinout & Configuration"页面,找到"TouchGFX Generator"
  6. 勾选"Enable TouchGFX Generator",选择屏幕分辨率(如480x272)
  7. 点击"Generate Code",CubeMX会自动生成TouchGFX工程骨架

生成的工程结构大概是这样:

Project/
├── Core/               # HAL库、主函数
├── TouchGFX/
│   ├── App/            # 用户界面逻辑
│   ├── Config/         # 配置文件
│   ├── Generated/      # 自动生成的代码(不要手动修改)
│   └── target/         # 硬件适配层
├── Drivers/            # 外设驱动
└── .ioc                # CubeMX配置文件

1.4.4 验证环境是否正常

工程生成后,用IDE打开,直接编译。如果没报错,恭喜你,环境搭好了。

然后下载到开发板,你应该能看到TouchGFX的默认Demo界面——一个带"TouchGFX"字样的启动画面。如果屏幕亮了但没显示,检查LTDC的时序配置和SDRAM初始化代码。

小技巧:第一次跑不起来很正常。我建议你先用ST官方的评估板(比如STM32F429I-DISCO),它的硬件配置和TouchGFX的默认模板完全匹配,几乎零配置就能跑起来。等熟悉了再移植到自己的板子上。

1.5 TouchGFX整体架构速览

在正式开始写代码之前,我觉得有必要让你对整个框架有个宏观认识。下面这张图是我自己整理的TouchGFX架构分层:

TouchGFX 整体架构分层 应用层(Application) 用户自定义界面逻辑、业务处理、数据绑定 框架层(Framework) Screen / View / Presenter 架构 事件分发、状态管理、动画调度 渲染层(Rendering) Canvas Widget / 文本渲染 / 图片解码 帧缓冲管理、DMA2D加速、局部刷新 硬件抽象层(HAL) LTDC / DMA2D / FMC / Touch 驱动适配 硬件层(MCU + 显示屏 + 触摸) 分 层 解 耦 每层 只关 注自 己的 职责

从这张图你能看到,TouchGFX的架构非常清晰:

  • 应用层:你写代码的地方。定义界面跳转、按钮响应、数据更新。
  • 框架层:MVP架构(Model-View-Presenter),把界面和逻辑解耦。这部分后面章节会详细讲。
  • 渲染层:负责把控件画到帧缓冲里。支持硬件加速(DMA2D)和软件渲染两种模式。
  • 硬件抽象层:适配具体的MCU外设和屏幕。ST已经帮你写好了大部分,你只需要配置引脚和时序。

我个人觉得,理解这个分层结构是学好TouchGFX的关键。很多初学者一上来就拖控件,遇到性能问题不知道怎么排查。其实你只要知道问题出在哪一层,解决思路就有了。

1.6 本章小结

这一章我们聊了TouchGFX是什么、怎么来的、能用在哪儿、环境怎么搭。说白了,就是给你一个全景图,让你知道接下来要学的东西到底长什么样。