1. TouchGFX 概述与环境搭建

各位同学好,我是老周。做嵌入式 UI 这些年,从最早的段式液晶、单色点阵,到后来用 emWin、LVGL,再到 TouchGFX,说实话,每次换工具都像重新学一门手艺。但 TouchGFX 给我的感觉不太一样——它让我觉得,嵌入式设备做动画、做滑动、做特效,终于不用再「硬怼」了。

这一章,我们先搞清楚 TouchGFX 到底是什么,然后手把手把开发环境搭起来。别急,我会把每个坑都指给你看。

1.1 TouchGFX 是什么

TouchGFX 是 ST 公司收购的一个嵌入式图形框架。说白了,它是一套专门给 MCU 用的 UI 引擎,让你能在资源有限的芯片上跑出接近手机 App 的界面效果。

我最早接触它是在 2018 年,当时一个客户要求做 60fps 的仪表盘动画,用传统方案根本跑不动。后来换成 TouchGFX,嗯,效果直接翻倍。从那以后,我就一直用它。

核心定位:TouchGFX 不是给 Linux 用的,也不是给高性能应用处理器用的。它的主战场是 Cortex-M 系列 MCU,尤其是 STM32。说白了,就是让单片机也能做漂亮的图形界面。

1.2 核心特性

我挑几个最实用的特性讲,不罗列那些官网上的废话。

  • 硬件加速:TouchGFX 直接调用 STM32 的 LTDC、DMA2D、Chrom-ART 等外设。我在项目中实测过,开启 DMA2D 后,帧率能提升 3-5 倍。
  • 低内存占用:它用了一种叫「局部刷新」的机制,只更新变化的部分。比如一个数字从 100 变成 101,它不会重绘整个屏幕。
  • 所见即所得设计器:TouchGFX Designer 是拖拽式的,你画完界面,代码就自动生成了。这个后面会细讲。
  • 丰富的控件库:按钮、滑块、图表、键盘、列表……基本够用。不够的话可以自己写自定义控件。
  • 多语言支持:内置了文字国际化机制,切换语言不用改代码。

我的经验:如果你之前用过 emWin 或 LVGL,会觉得 TouchGFX 的 API 更「现代」一些。它大量使用 C++ 的继承和多态,代码结构清晰很多。但代价是——你得懂一点 C++ 基础。

1.3 应用场景

不是所有项目都适合用 TouchGFX。我列几个典型的场景,你对照一下自己的项目。

场景 典型设备 推荐理由
工业 HMI PLC 人机界面、数据采集终端 稳定、支持实时数据刷新
智能家居 智能面板、温控器、门禁 动画流畅、开发周期短
医疗设备 监护仪、手持诊断仪 高帧率、低延迟
汽车仪表 数字仪表盘、中控屏 支持多图层、抗锯齿
消费电子 智能手表、家电面板 资源占用低、功耗可控

我遇到过最离谱的一个项目,是用 STM32F429 做 7 寸屏的医疗监护仪。当时所有人都说「F4 跑不动 800x480 的动画」,但 TouchGFX 配合 DMA2D,硬是跑到了 50fps。嗯,从那以后我再也不信「MCU 做不了好 UI」这种话了。

1.4 开发环境搭建

环境搭建是新手最容易卡住的地方。我按步骤来,你跟着做就行。

1.4.1 需要的工具

  • STM32CubeMX:配置芯片引脚、时钟、外设,生成初始化代码。
  • TouchGFX Designer:拖拽设计界面,自动生成 UI 代码。
  • IDE:推荐 STM32CubeIDE 或 Keil MDK。我个人习惯用 CubeIDE,因为和 CubeMX 集成得最好。
  • TouchGFX 引擎包:包含运行时库和驱动,CubeMX 会自动下载。

1.4.2 安装步骤

  1. 安装 STM32CubeMX:去 ST 官网下载最新版,一路 Next 就行。注意安装路径不要有中文。
  2. 安装 TouchGFX Designer:同样从官网下载。安装完后会提示你安装 STM32CubeMX 插件,选「是」。
  3. 安装 IDE:如果你用 CubeIDE,它会自带 GCC 工具链。如果用 Keil,需要单独安装 ARMCC。
  4. 配置 CubeMX 的 TouchGFX 组件:打开 CubeMX,在 Help → Manage embedded software packages 里,找到 TouchGFX 并安装。

我曾经踩过的坑:CubeMX 和 TouchGFX Designer 的版本必须匹配。比如 CubeMX 6.8 对应 TouchGFX 4.22,版本不对会导致生成代码失败。建议全部用最新版,或者去 ST 官网查兼容性矩阵。

1.4.3 创建一个最小工程

我们快速走一遍流程,让你感受一下。

  1. 打开 CubeMX,新建工程,选择你的 STM32 型号(比如 STM32F429ZIT6)。
  2. 在 Pinout & Configuration 里,启用 LTDC、DMA2D、FMC(如果接 SDRAM)。
  3. 在 Software Packs 里,选择 TouchGFX,勾上「Generate TouchGFX project」。
  4. 配置时钟:LTDC 的像素时钟要根据你的屏幕参数来。比如 5 寸 800x480 屏,典型值是 33.3MHz。
  5. 点击 Generate Code,CubeMX 会生成一个包含 TouchGFX 框架的工程。
  6. 用 CubeIDE 打开工程,编译。如果没报错,恭喜你,环境搭好了。

小技巧:第一次编译会很慢,因为要下载 TouchGFX 引擎源码。建议用公司网络,或者提前把包下载好放到本地仓库。

1.5 知识体系总览

下面这张图是我自己整理的 TouchGFX 开发全流程。你把它存下来,后面每学一章都可以回来对照一下,看看自己学到哪个环节了。

TouchGFX 开发全流程 TouchGFX 开发全流程 需求分析 UI 原型、交互逻辑 硬件选型 MCU、屏幕、存储器 环境搭建 CubeMX + Designer + IDE TouchGFX Designer 界面设计 拖拽控件、配置交互、预览效果 代码生成与集成 自动生成 UI 代码 → 集成到 CubeMX 工程 → 添加业务逻辑 编译、下载、调试 解决编译错误、调试帧率、优化内存 部署与量产 本课程覆盖前 4 步 部署部分在第 28-30 章

这张图把 TouchGFX 开发分成了 5 个阶段。我们这门课会从前 4 个阶段逐步深入,最后再讲部署量产。你每次学完一章,都可以回来看看自己走到哪一步了。

1.6 本章小结

这一章我们做了三件事:

  • 搞清楚了 TouchGFX 是什么——一个给 MCU 用的图形框架,主打硬件加速和低内存。
  • 了解了它的核心特性和适用场景——不是万能药,但在 STM32 + 屏幕的项目里,它是最优解之一。
  • 把开发环境搭起来了——CubeMX、Designer、IDE,一个都不能少。