3、第一个移植项目:从零创建TouchGFX工程、配置LCD接口(LTDC/RGB565/RGB888)、配置触摸屏(I2C/SPI)、编译与下载验证

好,咱们正式开始动手。

前面两章讲了理论,这一章咱们直接干。从零创建一个TouchGFX工程,把LCD点亮,把触摸屏调通,最后编译下载验证。我敢说,这一步走顺了,后面30章你都会觉得轻松。

但我也得提前打个预防针——第一个项目往往是最折磨人的。不是技术多难,而是你面对的是一个全新的工具链,一个陌生的配置界面,还有一堆你根本不知道干嘛用的寄存器。别慌,我带你一步步走。

3.1 创建TouchGFX工程——选对模板,少走弯路

打开TouchGFX Designer,新建项目。这一步看起来简单,但坑不少。

我的习惯: 选「Empty Application」模板,别选那些带Demo的。Demo工程虽然能跑,但里面塞了一堆你不需要的代码,后期移植反而碍事。

创建工程时,你会遇到几个关键选项:

  • Target: 选你的MCU型号。比如我用的STM32H750,那就选STM32H750IBKx。
  • Display: 先随便选一个,后面我们会手动改LTDC配置。
  • Touch: 同样先选一个占位,后面再配。

嗯,这里要注意:TouchGFX Designer生成的代码是基于CubeMX的。所以你的MCU必须被CubeMX支持。如果你用的是国产MCU或者冷门型号,那这条路走不通,得手动移植——这个我们后面章节会讲。

3.2 配置LCD接口——LTDC、RGB565、RGB888,到底选哪个?

LCD接口是移植的第一步,也是最容易出问题的地方。说白了,你要告诉MCU:你怎么把图像数据送到屏幕上。

常见的接口有两种:

接口类型 数据线数量 颜色深度 适用场景
RGB565 16根数据线 16位(65K色) 资源受限、低成本方案
RGB888 24根数据线 24位(16.7M色) 色彩要求高、性能充裕

我个人建议:能用RGB888就别用RGB565。为什么?因为RGB565在显示渐变色和图片时,色阶断层非常明显。我在一个医疗项目里吃过这个亏——客户说屏幕上的波形图有「条纹感」,查了半天,就是RGB565的色深不够。

但如果你MCU的引脚不够,或者LCD屏只支持RGB565,那也没办法。咱们得看实际情况。

3.2.1 在CubeMX中配置LTDC

打开CubeMX,找到你的MCU型号。在「Pinout & Configuration」里,找到LTDC外设,启用它。

配置要点:

  • Layer:至少启用1个图层。TouchGFX只用1层就够了。
  • Pixel Clock:这个值要根据你的LCD屏的时序要求来算。一般屏的规格书里会写「CLK Frequency」,照着填就行。
  • HSYNC、VSYNC、HBP、VBP:这些参数决定了图像的同步和消隐区。别乱填,一定要看屏的规格书。
我曾经踩过的坑: 有一次我偷懒,没看规格书,直接用了另一个屏的参数。结果屏幕死活不亮,示波器一量,发现像素时钟差了0.5MHz。就这0.5MHz,折腾了我一整天。所以,规格书是你的第一手资料,别凭经验猜。

3.2.2 配置RGB引脚映射

LTDC的引脚是可以重映射的。在CubeMX里,你可以手动分配每个RGB信号到具体的GPIO引脚。

这里有个技巧:优先使用连续的引脚组。比如R0-R7最好在一个GPIO Port上,这样布线方便,代码也清晰。如果分散在不同Port,你得在代码里单独配置每个引脚,麻烦不说,还容易出错。

3.3 配置触摸屏——I2C还是SPI?

触摸屏的接口,常见的就是I2C和SPI。我直接说结论:

  • I2C: 引脚少(2根线),速度慢,适合电阻屏或低端电容屏。
  • SPI: 引脚多(4根线),速度快,适合高端电容屏,尤其是多点触控。

我个人更倾向于SPI。为什么?因为I2C在高速下容易受干扰,尤其是在LCD旁边,电磁环境复杂。我在一个工控项目里,触摸屏用I2C,结果每次电机启动,触摸就失灵。换成SPI后,问题消失。

3.3.1 在CubeMX中配置I2C/SPI

以I2C为例:

  1. 在CubeMX里找到I2C外设,启用它。
  2. 配置速率:一般触摸屏用400kHz(Fast Mode)就够了。
  3. 分配引脚:注意SCL和SDA要加上拉电阻,一般4.7kΩ。

SPI的配置类似,但要注意:SPI的时钟极性(CPOL)和时钟相位(CPHA)必须和触摸屏芯片匹配。这个信息在触摸屏芯片的规格书里会有。

关键一步: 配置完外设后,记得在TouchGFX Designer里选择对应的触摸屏驱动。如果你用的是FT5x06(I2C接口),就选FT5x06;如果你用的是GT911(I2C接口),就选GT911。别选错了,否则触摸没反应。

3.4 编译与下载验证——点亮屏幕的那一刻

所有配置完成后,生成代码。回到TouchGFX Designer,点击「Generate Code」。然后打开你的IDE(我习惯用Keil或者STM32CubeIDE),编译。

第一次编译,大概率会报错。别慌,常见的错误有:

  • 找不到头文件: 检查一下Include Path有没有添加TouchGFX的库路径。
  • 引脚冲突: 有些引脚被其他外设占用了,去CubeMX里检查一下。
  • 内存不足: TouchGFX的Frame Buffer需要一大块连续内存。如果你的MCU内部SRAM不够,得用外部SDRAM。这个我们后面章节会详细讲。

编译通过后,下载到板子。如果一切顺利,你会看到屏幕上出现TouchGFX的默认界面——一个灰色的背景,中间有个「TouchGFX」的Logo。

那一刻,说实话,挺有成就感的。

验证触摸: 用手指点一下屏幕,如果能看到触摸反馈(比如一个圆圈跟着你的手指移动),那说明触摸也调通了。如果没有反应,先检查I2C/SPI的通信,用示波器看波形。我遇到过最蠢的问题——触摸屏的排线没插紧。

3.5 本章知识体系

下面这张图,帮你理清整个流程:

第一个移植项目:从零创建TouchGFX工程 1. 创建TouchGFX工程 2. 配置LCD接口 3. 配置触摸屏 4. 编译与下载验证 5. 点亮屏幕,触摸可用 核心要点 选对模板 → 配好LTDC时序 → 调通触摸通信 → 编译下载验证

这张图把整个流程串起来了。你按这个顺序走,基本不会乱。

3.6 避坑总结

最后,我把这一章最容易踩的坑列出来,你对照着检查:

  • LTDC时序参数填错: 一定要看规格书,别猜。
  • RGB引脚映射混乱: 优先用连续引脚组,减少出错概率。
  • 触摸屏接口速率不匹配: I2C用400kHz,SPI用屏支持的最高速率。
  • Frame Buffer内存不足: 如果编译报内存不足,考虑用外部SDRAM。
  • 触摸屏驱动选错: 在TouchGFX Designer里选对型号。

嗯,这一章的内容就到这儿。你按步骤走,第一个项目应该能顺利跑起来。如果卡住了,别硬扛——回头看看是不是哪个配置漏了。我当年第一个项目,光LTDC的时序就调了三天。后来发现,是HBP少填了1个像素。

这种坑,踩过一次就记住了。