2. 嵌入式HMI与TouchGFX概述

说实话,很多初学者一上来就急着写代码,结果卡在环境配置上大半天。我见过不少学员,明明硬件没问题,就是工具链没搭对,编译报错一堆,最后怀疑人生。

这一章,咱们就把开发环境彻底搞定。你跟着我的步骤走,保证一次过。

本章核心目标:完成从芯片配置、图形界面设计到代码编译调试的全链路工具链搭建。

2.1 整体工具链概览

先看一张图,你就明白这些工具之间的关系了。

TouchGFX 开发工具链架构图 硬件抽象层 STM32CubeMX(芯片配置 + 外设初始化 + 中间件集成) 图形界面层 TouchGFX Designer(UI设计 + 资源管理) 生成 .touchgfx 项目 + 代码框架 应用逻辑层 用户业务代码 + 屏幕逻辑 在 IDE 中编写与调试 编译调试层 MDK-ARM / IAR EWARM(编译 + 下载 + 调试) 目标硬件:STM32 + 显示屏

你看,整个流程是单向的:先用 CubeMX 配好芯片,再在 Designer 里画界面,最后在 IDE 里写逻辑、编译下载。每一步都有明确的输入输出。

2.2 STM32CubeMX 安装与配置

STM32CubeMX 是 ST 官方出的芯片配置工具。说白了,它就是帮你省掉手写初始化代码的苦力活。

2.2.1 下载与安装

  1. 去 ST 官网下载:搜索 "STM32CubeMX",找到最新版本。我建议下载 6.x 以上版本,对 TouchGFX 支持更好。
  2. 安装过程:一路 Next 就行。注意安装路径不要有中文,否则后面编译可能出奇怪的问题。
  3. 安装固件包:打开 CubeMX,点击 Help → Manage embedded software packages,找到你用的芯片系列(比如 STM32F4、STM32H7),下载对应的固件包。

我的习惯:只下载当前项目需要的固件包,别全下。全下的话,光下载就得半小时,还占硬盘空间。

2.2.2 关键配置项

创建新项目后,有几步特别重要:

配置项 推荐设置 说明
RCC(时钟) HSE + PLL,主频拉到最高 TouchGFX 对 CPU 性能有要求,频率越高越流畅
LTDC(显示控制器) 根据屏幕参数配置 分辨率、像素时钟、HBP/VBP 等必须和屏幕手册一致
DMA2D 开启,配置为图形加速 没有 DMA2D,TouchGFX 性能直接砍半
FMC(外部存储器) 如果使用外部 SDRAM 则开启 大分辨率屏幕必须外扩显存
TouchGFX Generator 勾选并选择版本 这是 CubeMX 和 TouchGFX 的桥梁,必须配

我曾经踩过的坑:LTDC 的像素时钟配错了,屏幕死活不亮。后来用示波器量才发现时钟频率差了一倍。一定要对着屏幕数据手册逐项核对。

2.3 TouchGFX Designer 安装与配置

TouchGFX Designer 是图形界面设计工具。你拖拖控件、调调颜色,它就能生成 C++ 代码。

2.3.1 安装步骤

  1. 从 ST 官网下载 TouchGFX Designer(注意不是 TouchGFX Engine,那是运行时库)。
  2. 安装时选择 Custom 模式,把 Examples 和 Templates 都勾上。这些例程很有参考价值。
  3. 安装完成后,打开 Designer,它会自动检测 CubeMX 的安装路径。

2.3.2 与 CubeMX 的联动

这里有个关键操作:

  • 在 CubeMX 中配置好芯片后,点击 Project → Generate Code,会生成一个 .ioc 文件。
  • 在 Designer 中新建项目时,选择 Create from STM32CubeMX,导入刚才的 .ioc 文件。
  • Designer 会自动读取芯片型号、屏幕参数、引脚分配等信息。

注意:如果你先开了 Designer 再改 CubeMX 配置,记得在 Designer 里点 File → Reload from CubeMX,否则两边不同步。

2.4 MDK-ARM / IAR 工具链集成

工具链就是编译器 + 调试器。我两种都用过,各有千秋。

2.4.1 MDK-ARM(Keil)

MDK 在国内用得最多,上手快,资料多。

  1. 安装 MDK-ARM:去 Keil 官网下载,安装时选对芯片型号(比如 STM32F4xx_DFP)。
  2. 配置 TouchGFX 插件:MDK 需要安装 TouchGFX Pack。在 Pack Installer 里搜索 "TouchGFX",安装最新版。
  3. 导入项目:在 Designer 中生成代码后,用 MDK 打开 .uvprojx 文件,直接编译。

我个人习惯:MDK 的编译速度比 IAR 快一点,但调试功能 IAR 更强。小项目用 MDK,大项目用 IAR。

2.4.2 IAR EWARM

IAR 的优化做得更好,代码体积小,适合资源受限的场景。

  1. 安装 IAR:注意版本,建议 8.5 以上,对 C++17 支持更好。
  2. 配置 TouchGFX 库路径:在 IAR 中打开项目后,需要手动添加 TouchGFX 的库文件路径。路径一般在 C:\TouchGFX\4.x.x\lib\core\cortex_m4f\iar。
  3. 设置预处理器:在项目选项中添加 SIMULATOR=0 和 USE_STM32H7(根据芯片调整)。

我曾经遇到的情况:IAR 编译通过,但下载后屏幕没反应。查了半天,发现是链接脚本里堆栈大小设小了,TouchGFX 的动态内存分配失败。把堆栈从 0x400 改成 0x1000 就好了。

2.5 工具链对比与选择建议

对比项 MDK-ARM IAR EWARM
上手难度 低,中文资料多 中,英文资料为主
编译速度 较快 中等
代码优化 良好 优秀(体积更小)
调试功能 基础 强大(支持 RTOS 感知)
TouchGFX 集成 原生支持,一键导入 需手动配置库路径
价格 中等(有免费版限制 32KB) 较高(有评估版)

我的建议是:如果你是新手,先用 MDK,省心。等做复杂项目了,再考虑 IAR。

2.6 验证环境是否搭建成功

环境搭没搭好,跑个例程就知道了。

  1. 在 TouchGFX Designer 中打开一个官方例程(比如 STM32H7B3I_DK 的演示)。
  2. 点击 Generate Code,生成完整工程。
  3. 用 MDK 或 IAR 打开生成的工程,编译。
  4. 下载到开发板,看屏幕是否正常显示。

如果屏幕亮了,恭喜你,环境搭建成功!

如果没亮,别慌。检查以下几点:

  • CubeMX 中 LTDC 的引脚分配是否正确?
  • 屏幕的排线是否插紧?
  • 电源是否足够?有些屏幕需要 3.3V 和 5V 双供电。