3. 硬件平台准备:选对芯片,搭好骨架

硬件选型这事儿,说白了就是给 TouchGFX 找个合适的「家」。家太小了住不下,太大了又浪费。我这些年帮客户做过不下二十块板子的选型评估,踩过的坑真不少。今天咱们就以 STM32 为例,把 MCU、屏幕接口、触摸方案、还有 SDRAM 和 Flash 这些事儿一次说清楚。

核心原则:TouchGFX 对硬件的核心要求就三条——够快的刷新速度、够大的显存空间、够稳的存储介质。满足这三条,剩下的都好说。

3.1 MCU 选型:STM32 怎么挑?

TouchGFX 官方推荐用 Cortex-M7 或更高性能的内核。为什么?因为 UI 渲染需要大量浮点运算和内存搬运,M4 虽然也能跑,但帧率上不去,动画多了就卡。

我个人习惯把 STM32 分成三个梯队:

梯队 典型型号 适用场景 我的评价
第一梯队 STM32H7xx 系列 高分辨率、复杂动画、多图层 性能过剩,但贵,适合旗舰产品
第二梯队 STM32F7xx 系列 中等分辨率、常规 UI 性价比之王,我大部分项目都用它
第三梯队 STM32F4xx 系列 低分辨率、静态界面 勉强能跑,但别指望流畅动画

选型时还要注意一个关键参数:LTDC(LCD-TFT 显示控制器)。STM32 里不是所有型号都带 LTDC 外设。比如 STM32F429 有,但 STM32F407 就没有。没有 LTDC 的话,你就只能用 SPI 或 MCU8080 接口,刷新效率差一大截。

我的小技巧:去 ST 官网搜「STM32 + LTDC」,出来的型号列表就是你的候选池。别自己一个个翻数据手册,太累了。

3.2 LCD 屏幕接口:RGB、SPI、MCU8080 怎么选?

屏幕接口这事儿,我见过太多人在这上面翻车。选错了接口,后面移植 TouchGFX 就是噩梦。

三种主流接口的对比:

接口类型 带宽 引脚数 是否带显存 TouchGFX 适配难度
RGB 并行接口 高(24位色,最高 60fps) 24~30 根 否(需要外部 SDRAM) 低(原生支持)
SPI 串行接口 低(最高约 20fps) 4~6 根 是(屏幕自带显存) 中(需要驱动适配)
MCU8080 并行接口 中(约 30fps) 16~18 根 是(屏幕自带显存) 中(需要 FSMC 配合)

我的建议:如果你做的是 4.3 寸以上的屏幕,分辨率超过 480×272,老老实实用 RGB 接口。SPI 接口只适合 2.8 寸以下的小屏,而且动画一多就露怯。我曾经在一个项目里硬要用 SPI 接口跑 800×480 的屏,结果帧率只有 8fps,客户差点没把我骂死。

注意:RGB 接口虽然快,但它没有显存。你必须外挂 SDRAM 来当帧缓冲。后面会细说。

3.3 触摸屏接口:I2C 还是 SPI?

触摸屏这事儿相对简单。主流触摸控制器就两种接口:

  • I2C 接口:引脚少(SCL+SDA),速度够用,适合大多数场景。我 80% 的项目都用 I2C 触摸。
  • SPI 接口:速度更快,但多两根线。一般用在需要高报点率的场景,比如手写识别。

选型时注意一个坑:触摸控制器的中断引脚。很多新手忘了接 INT 引脚,结果 TouchGFX 只能轮询触摸状态,CPU 占用率飙升。我建议 INT 引脚一定要接,而且选一个支持上升沿/下降沿触发的中断 GPIO。

常见的触摸控制器型号:

  • FT5x06 / FT6x36(I2C,电容触摸,最常用)
  • GT911 / GT9271(I2C,支持多点触摸)
  • TSC2046(SPI,电阻触摸,老项目还在用)

避坑指南:我曾经在一个项目里用了 FT5x06,结果发现它的 I2C 地址是 0x38,但 TouchGFX 默认驱动写的是 0x70。折腾了两天才发现是地址左移了一位。嗯,这种细节你一定要注意。

3.4 外部 SDRAM:为什么必须要有?

这个问题我每次培训都有人问:STM32 内部不是有 SRAM 吗?为什么还要外挂 SDRAM?

咱们算笔账:一个 800×480 的屏幕,24 位色,一帧画面需要多少内存?

800 × 480 × 3(RGB 各 1 字节)= 1,152,000 字节 ≈ 1.1 MB

TouchGFX 通常需要双缓冲(甚至三缓冲)来实现流畅动画。也就是说,你至少需要 2.2 MB 的显存。而 STM32 内部 SRAM 最大也就 1 MB(H7 系列),F7 系列只有 320 KB。根本不够用。

所以,外挂 SDRAM 几乎是必须的。常用的型号:

  • IS42S16400J(64 Mb,8 MB,够用)
  • W9825G6KH(256 Mb,32 MB,富裕)
  • MT48LC4M32B2(128 Mb,16 MB,性价比高)

选 SDRAM 时注意三点:

  1. 位宽:尽量选 16 位或 32 位的,8 位的带宽不够。
  2. 速度:至少 133 MHz 以上,否则刷新率上不去。
  3. 封装:BGA 封装焊接难度大,新手建议用 TSOP 或 TSSOP。

我的经验:SDRAM 的 PCB 布线是硬件设计里最难的一环。等长、阻抗匹配、去耦电容,一个都不能少。我第一块板子就是 SDRAM 布线没做好,跑 168 MHz 就死机,最后降频到 120 MHz 才稳定。所以,如果你是自己画板子,SDRAM 部分一定要参考 ST 官方的参考设计。

3.5 外部 Flash:存什么?

外部 Flash 主要用来存两样东西:

  • 字体和图片资源:TouchGFX 的 UI 资源(字体、图片、动画帧)通常有几 MB 到几十 MB,内部 Flash 根本放不下。
  • 固件升级备份:OTA 升级时,需要一块区域存新固件。

常用的外部 Flash 类型:

类型 容量 接口 速度 适用场景
NOR Flash 16 MB ~ 128 MB QSPI / Parallel 快(支持 XIP 执行) 存代码和资源,首选
NAND Flash 128 MB ~ 几 GB Parallel / SPI 慢(需要坏块管理) 存大量图片或日志
SD 卡 几 GB ~ 几十 GB SDIO / SPI 中 原型验证阶段用

我个人推荐用 QSPI NOR Flash,比如 W25Q64(64 Mb)或 W25Q128(128 Mb)。QSPI 接口速度快,而且支持内存映射模式,可以直接把 Flash 当内存访问,TouchGFX 的资源加载效率很高。

注意:如果你用 QSPI Flash,一定要确认 STM32 型号是否支持 QSPI 外设。F4 系列大部分不支持,F7 和 H7 系列基本都支持。

3.6 整体硬件架构图

下面这张图是我做 TouchGFX 项目时常用的硬件架构,你可以参考:

TouchGFX 硬件平台架构图 STM32 MCU Cortex-M7 / LTDC / FMC 外部 SDRAM 帧缓冲 / 显存 外部 NOR Flash UI 资源 / 固件 LCD 屏幕 RGB 接口 / 24 位色 触摸屏 I2C / SPI 接口 FMC 总线 QSPI LTDC + RGB I2C / SPI 说明: 1. SDRAM 通过 FMC 总线与 MCU 连接,作为 TouchGFX 的帧缓冲 2. NOR Flash 通过 QSPI 接口存储 UI 资源,支持内存映射模式 3. LCD 通过 LTDC 接口直接驱动,触摸屏通过 I2C/SPI 上报坐标

3.7 选型清单速查表

最后,我整理了一份选型清单,你照着这个买元器件基本不会错:

组件 推荐型号 备注
MCU STM32F746 / STM32H750 带 LTDC 和 QSPI
SDRAM W9825G6KH / IS42S16400J 16 位宽,133 MHz+
NOR Flash W25Q128JV QSPI 接口,128 Mb
LCD 屏幕 ATK-4342 / 正点原子 4.3寸 RGB 480×272 或 800×480
触摸控制器 FT5x06 / GT911 I2C 接口,带 INT 引脚

最后说一句:硬件选型没有绝对的对错,关键看你的项目需求。如果你只是做个原型验证,用开发板就行。但如果是量产产品,一定要在选型阶段多花点时间。我见过太多项目因为硬件选型失误,后面改板子改到崩溃。嗯,希望你能一次选对。