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 安装步骤
- 安装 STM32CubeMX:去 ST 官网下载最新版,一路 Next 就行。注意安装路径不要有中文。
- 安装 TouchGFX Designer:同样从官网下载。安装完后会提示你安装 STM32CubeMX 插件,选「是」。
- 安装 IDE:如果你用 CubeIDE,它会自带 GCC 工具链。如果用 Keil,需要单独安装 ARMCC。
- 配置 CubeMX 的 TouchGFX 组件:打开 CubeMX,在 Help → Manage embedded software packages 里,找到 TouchGFX 并安装。
我曾经踩过的坑:CubeMX 和 TouchGFX Designer 的版本必须匹配。比如 CubeMX 6.8 对应 TouchGFX 4.22,版本不对会导致生成代码失败。建议全部用最新版,或者去 ST 官网查兼容性矩阵。
1.4.3 创建一个最小工程
我们快速走一遍流程,让你感受一下。
- 打开 CubeMX,新建工程,选择你的 STM32 型号(比如 STM32F429ZIT6)。
- 在 Pinout & Configuration 里,启用 LTDC、DMA2D、FMC(如果接 SDRAM)。
- 在 Software Packs 里,选择 TouchGFX,勾上「Generate TouchGFX project」。
- 配置时钟:LTDC 的像素时钟要根据你的屏幕参数来。比如 5 寸 800x480 屏,典型值是 33.3MHz。
- 点击 Generate Code,CubeMX 会生成一个包含 TouchGFX 框架的工程。
- 用 CubeIDE 打开工程,编译。如果没报错,恭喜你,环境搭好了。
小技巧:第一次编译会很慢,因为要下载 TouchGFX 引擎源码。建议用公司网络,或者提前把包下载好放到本地仓库。
1.5 知识体系总览
下面这张图是我自己整理的 TouchGFX 开发全流程。你把它存下来,后面每学一章都可以回来对照一下,看看自己学到哪个环节了。
这张图把 TouchGFX 开发分成了 5 个阶段。我们这门课会从前 4 个阶段逐步深入,最后再讲部署量产。你每次学完一章,都可以回来看看自己走到哪一步了。
1.6 本章小结
这一章我们做了三件事:
- 搞清楚了 TouchGFX 是什么——一个给 MCU 用的图形框架,主打硬件加速和低内存。
- 了解了它的核心特性和适用场景——不是万能药,但在 STM32 + 屏幕的项目里,它是最优解之一。
- 把开发环境搭起来了——CubeMX、Designer、IDE,一个都不能少。