2、开发环境搭建:STM32CubeMX配置、TouchGFX Designer安装、编译器(IAR/Keil/GCC)配置、调试工具准备
说实话,很多新手在TouchGFX移植上栽跟头,八成不是代码写错了,而是环境没搭对。我见过有人花了一整天找编译错误,最后发现是CubeMX生成的代码版本和TouchGFX Designer不匹配。所以这一章,咱们先把地基打牢。
核心原则:所有工具的版本必须对齐。TouchGFX对版本耦合非常敏感,差一个小版本号都可能出幺蛾子。
2.1 STM32CubeMX配置——别急着点生成代码
STM32CubeMX是整条链路的起点。它的配置直接决定了TouchGFX能不能跑起来。我个人习惯先把这几步走完,再碰其他工具。
2.1.1 时钟树配置
TouchGFX需要稳定的帧率,时钟是命根子。我曾经在一个项目里忘了给LTDC外设单独配时钟,结果屏幕刷新像PPT翻页。
- HCLK:建议配到芯片支持的最高频率(比如STM32F429配到180MHz)。
- LTDC时钟:根据屏幕分辨率算。一般1024×600@60Hz,LTDC时钟需要30-40MHz。
- FMC/SDRAM时钟:如果用了外部SDRAM做帧缓冲,时钟延迟要调好,否则花屏。
小技巧:在CubeMX的Clock Configuration页面,把HCLK、APB1、APB2的数值截图保存。后面调试时对照着看,能快速定位时钟问题。
2.1.2 外设配置清单
TouchGFX最少需要这几个外设:
| 外设 | 用途 | 常见坑点 |
|---|---|---|
| LTDC | 显示控制器 | 层数、像素格式、同步极性必须和屏幕手册一致 |
| DMA2D | 图形加速 | 不开启的话,帧率直接砍半 |
| FMC | 外接SDRAM/Flash | 时序参数配错会导致随机花屏 |
| CRC | 校验(TouchGFX内部用) | 很多人忘了开,编译能过但运行会卡死 |
| GPIO | 背光、触摸中断 | 背光引脚默认输出低电平,屏幕黑着以为没驱动 |
注意:DMA2D在CubeMX里默认是关闭的。你必须在Pinout & Configuration页面手动勾选。我刚开始移植时就漏了这一步,折腾了两天才发现。
2.1.3 生成代码前的检查清单
点那个"GENERATE CODE"按钮之前,我建议你过一遍这个清单:
- Project Settings里Toolchain选对了(IAR/Keil/MDK-ARM)。
- 生成的初始化代码不要勾选"Generate peripheral initialization as a pair of .c/.h files per peripheral"——TouchGFX期望所有外设初始化在main.c里。
- Heap大小至少设到0x2000(8KB),否则malloc会失败。
- Stack大小建议0x1000(4KB),递归调用多的时候够用。
2.2 TouchGFX Designer安装——版本匹配是命门
TouchGFX Designer是个可视化UI设计工具,但它对CubeMX生成的代码版本有硬性要求。说白了,你用CubeMX 6.8生成的工程,就别指望TouchGFX Designer 4.18能完美兼容。
2.2.1 版本对应关系
我整理了一份常用版本对照表,照着来基本不会翻车:
| TouchGFX Designer版本 | 推荐CubeMX版本 | 备注 |
|---|---|---|
| 4.18.x | 6.6.x - 6.8.x | 最稳定组合 |
| 4.19.x | 6.9.x | 新增了一些控件,但兼容性一般 |
| 4.20.x | 6.10.x | 需要手动打补丁 |
我的建议:如果项目不急,用TouchGFX Designer 4.18.3 + CubeMX 6.7.0。这个组合我用了三个项目,没出过版本冲突。
2.2.2 安装步骤
安装过程很简单,但有几个细节要注意:
- 安装路径不要有中文和空格。我见过有人装在"C:\Program Files (x86)\触摸屏设计工具",结果编译时路径解析报错。
- 安装完成后,先打开一次TouchGFX Designer,让它自动创建默认模板。这一步会生成一些环境变量。
- 如果电脑上装了多个版本的TouchGFX Designer,用"TouchGFX Environment"命令行工具切换版本。
2.3 编译器配置——IAR/Keil/GCC三选一
TouchGFX官方支持三种编译器。我三个都用过,说说各自的脾气。
2.3.1 IAR Embedded Workbench
IAR的优化做得最好,代码体积小,但License贵。如果你在公司做产品,IAR是首选。
- 配置要点:在Options -> C/C++ Compiler -> Preprocessor里,把TouchGFX的Include路径加进去。
- 常见坑:IAR默认不开启C++异常支持。TouchGFX用了一些C++特性,必须在General Options -> Library Configuration里选"Full"。
2.3.2 Keil MDK
Keil在国内用户多,资料好找。但它的编译速度慢,大项目编译一次够喝杯咖啡。
- 配置要点:在Project -> Options for Target -> C/C++里,把Optimization设到-O2以上,否则帧率上不去。
- 避坑指南:我曾经在Keil里忘了勾选"Use MicroLIB",结果malloc/free全失效,TouchGFX的动态内存分配直接崩了。
2.3.3 GCC(STM32CubeIDE)
免费、开源、跨平台。适合个人开发者或小团队。但GCC的浮点运算优化不如IAR。
- 配置要点:在STM32CubeIDE里,Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> Miscellaneous里,加上"-u _printf_float"才能正常打印浮点数。
- 注意:GCC的链接脚本(.ld文件)里,必须给TouchGFX的帧缓冲预留足够大的连续内存空间。我一般把SDRAM的起始地址留给它。
2.4 调试工具准备——别等出问题了再找
调试工具就像消防栓,平时不起眼,着火时才知道重要。我建议在项目一开始就把调试环境搭好。
2.4.1 硬件调试器
| 调试器 | 优点 | 缺点 |
|---|---|---|
| J-Link | 速度快,支持RTT日志 | 贵,盗版容易掉固件 |
| ST-Link | 便宜,STM32原生支持 | 速度慢,不支持SWO |
| DAP-Link | 开源,可定制 | 驱动麻烦,稳定性一般 |
警告:别用盗版J-Link做TouchGFX调试。我有个同事用了盗版V9,调试时断点命中率只有60%,查了三天发现是调试器时序不稳导致变量值被篡改。
2.4.2 软件调试工具
除了IDE自带的调试器,这几个工具能救命:
- STM32CubeMonitor:实时看变量曲线,适合调帧率。
- 串口助手:打印日志用。TouchGFX有内置的日志宏,打开后能看到渲染流程。
- 逻辑分析仪:抓LTDC的同步信号。屏幕闪屏时,用它一看就知道是行同步还是场同步出了问题。
2.5 环境搭建总览图
下面这张图把整个开发环境的关系理清楚了。你照着这个流程走,基本不会漏步骤。
嗯,到这里,开发环境就算搭好了。别急着往下走,先编译一个空工程试试,确认每个环节都通了。我见过太多人一口气配完所有工具,结果编译时报错,又回头一个个排查,反而更浪费时间。