第一次点亮这块屏幕时,我只是照着 AI 给出的接线表操作:哪根线接哪个 GPIO,我就跟着接。但当我想把杂乱的线路重新整理一下时,我才发现,自己连一根线都不敢拔。
问题并不是我不会把导线插进面包板,而是我不知道这七根线为什么要这样接。它们哪些负责供电,哪些负责传送画面,哪些位置可以调整,哪些位置不能随便换,我都说不清楚。
从决定弄懂七根线,到最后完成重新走线,我大约花了两天。真正动手重新走线,只用了五分钟。
**这篇文章适合谁:**第一次用 ESP32 连接 ST7789 屏幕,能够照着接线表操作,却不知道每根线为什么这样接的人。
**读完能得到什么:**把七根线放进一条完整的显示链路,并理解重新规划线路时,哪些约束必须保留。

重新走线前,GMT130 屏幕与 ESP32-S3 之间使用多根较长线材连接,线路在面包板上方交叉。
先别背七个英文:它们其实只有四类工作
我使用的是 GMT130-V1.0,屏幕背面标注的控制器是 ST7789,接口是 SPI。排针上一共有七个名字:GND、VCC、SCK、SDA、RES、DC、BLK。
如果一上来逐个背缩写,很容易越看越乱。先按工作类型分类,七根线其实只做四类事情:
| 工作类别 | 针脚 | 先记住的一句话 |
|---|---|---|
| 供电与参考 | VCC、GND | 让模块获得电能,并让 ESP32 和屏幕使用同一个电压零点。 |
| 背光 | BLK | 打开 LCD 后面的光源。 |
| 复位 | RES | 让 ST7789 回到可以重新初始化的起点。 |
| SPI 写入 | SCK、SDA、DC | 把命令、参数和像素数据从 ESP32 写进屏幕。 |

GMT130-V1.0 正面排针旁依次标有 GND、VCC、SCK、SDA、RES、DC、BLK。
这张分类表就是理解后面所有细节的地图。遇到任何一根线,先问它属于哪一类,再问它在这一类里负责什么。
七根线怎样汇合成一幅画面
这四类工作不是七根线依次排队执行,而是几条支路同时配合。
-
**VCC 和 GND 建立工作基础。**屏幕模块获得电能,ESP32 和屏幕也有了共同的电压参考。
-
**BLK 打开背光支路。**它只负责提供光,不负责生成像素。
-
**RES 让控制器回到已知起点。**复位完成后,程序仍要继续发送初始化命令。
-
**SCK、SDA、DC 完成 SPI 写入。**ESP32 把初始化命令、参数和像素数据送给 ST7789。
-
**ST7789 驱动 LCD 像素。**背光穿过被控制的红、绿、蓝子像素,人眼才看到程序要求的颜色。

GMT130-V1.0 背面标有 240×240、Driver IC ST7789 和 Interface SPI。
**背光亮和像素写入成功是两件事。**屏幕发亮,只能说明背光和部分供电路径在工作;它不能证明复位、初始化、SPI 通信和像素写入都已成功。
VCC 和 GND:不仅要有电,还要共享同一个零点
VCC 给模块提供电能。在我的这套 GMT130-V1.0 与 ESP32-S3 实物中,VCC 接到开发板的 3V3。这个结论只覆盖我已经验证的模块,不代表所有外观相似的屏幕都可以不看规格直接照抄,更不能据此改接 5V。
GND 有两个容易被混在一起的作用。
-
它提供电流返回路径,让供电回路能够闭合。
-
它让 ESP32 和屏幕共享同一个电压参考,也就是共同的“零点”。
屏幕判断 SDA 上是 0 还是 1,不是在识别一个沿着导线跑过来的数字,而是在比较 SDA 相对屏幕 GND 的电压。双方没有共地时,屏幕看到的高低电平就没有可靠的共同参考。
因此,“VCC 负责供电,GND 负责回路”还不够完整。更准确的说法是:VCC 提供电能,GND 同时提供回流路径和共同参考
BLK 和 RES:一个管光,一个让控制器重新开始
**BLK 是背光控制。**我的接法是把 BLK 直接接到 3V3,因此通电后背光保持开启。但背光只是 LCD 后面的光源,它不会发送命令,也不会凭空生成红色像素。
**RES 是硬件复位。**ESP32 通过 RES 给 ST7789 一个复位信号,让控制器回到规定的初始状态。它解决的是“从一个已知起点重新开始”,不是“自动把屏幕变成黑色或红色”。
复位之后,程序还要发送初始化命令,并把像素数据写入显示内存。也正因为 BLK 与 RES 属于不同支路,拉动 RES 时,直接接在 3V3 上的背光仍会继续亮。
SPI 写入:SDA 给内容,SCK 给时刻,DC 给类别
SPI 可以先理解为一套双方都遵守的传输约定。它不是一句“中文”或“英文”,而是对谁发送、线上怎样表示高低电平、什么时候读取以及数据按什么顺序组织的一组规则。
这块七针屏幕没有把读取返回线和片选线引出来。文章里最需要理解的是 SCK、SDA、DC 三根线:
| 针脚 | 负责什么 | 实际发生的事 |
|---|---|---|
| SDA | 内容 | ESP32 依次把当前要发送的每一位设置为高电平或低电平。 |
| SCK | 读取时刻 | 时钟边沿到来时,ST7789 记录 SDA 当前稳定的值。 |
| DC | 内容类别 | 低电平表示命令,高电平表示参数或像素数据。 |
什么是“边沿”?一根线从低电平变为高电平,这个变化时刻叫上升沿;从高电平变为低电平,叫下降沿。在我验证成功的 Mode 3 配置中,ESP32 先让 SDA 稳定,再让 SCK 出现约定的上升沿,ST7789 就在这个时刻记录 SDA 是 0 还是 1。
这里最容易误解的一点是:**不是 SDA 自己发生变化,屏幕就自动读取。**SDA 即使一直保持高电平,只要 SCK 连续给出两个读取时刻,屏幕仍可以记录两个 1。
DC 则像字节的类别标记。如果 ESP32 原本想发送一条命令,但 DC 错误地一直保持高电平,即使 SDA 和 SCK 都正常,ST7789 也会把收到的八位当成数据,而不是命令。
SPI 也不是“一次只能发送一个字节,发完就结束”。软件常把连续的位每八位组织成一个字节,但一次绘图会连续发送许多个命令、参数和像素字节。
以 RGB565 为例,一个像素需要 16 位,也就是 2 字节。240×240 的整屏共有 57,600 个像素,单是像素内容就有 115,200 字节。因此,SPI 时钟速度和软件开销确实会影响整屏换色速度。
一行 fillScreen,最后怎样变成红色
现在把七根线放回一次真实调用里。程序执行 tft.fillScreen(红色) 时,背后大致经历这些步骤:
-
显示库把“填满整屏”转换为一个 240×240 的绘制区域。
-
程序先发送列地址、行地址和开始写显示内存的命令。
-
DC 让 ST7789 知道当前收到的是命令,还是命令参数与像素。
-
SDA 依次给出每一位的高低电平,SCK 给出读取节奏。
-
ST7789 把连续收到的 RGB565 颜色写进显示内存,并驱动 LCD 面板对应的子像素。
-
BLK 支路已经打开背光。背光穿过 LCD,人眼最终看到整块红色。

ESP32-S3 使用硬件 SPI Mode 3 驱动同一块 GMT130-V1.0,屏幕显示红色纯色画面。
这条链路也解释了为什么排错时不能只问“屏幕亮没亮”。更有用的问题是:供电和共同参考是否成立?背光是否开启?控制器是否复位并初始化?SPI 命令与像素是否真正写入?
Mode 3 是我这块 GMT130-V1.0、当前库版本和程序已经验证的条件,不代表所有 ST7789 屏幕都必须使用 Mode 3。其他模块仍应先核对具体资料,再做单变量测试。
理解以后,怎样重新规划线路
理解七根线以后,“自主走线”不再是随便找七个孔插进去,而是先判断哪些约束必须保留。
-
**只改变线路经过的路径,不改变信号端点:**这是物理理线,一般不需要修改代码。
-
**把 SCK、SDA、RES、DC 换到其他合适 GPIO:**这是引脚修改。导线移动以后,代码中的 GPIO 定义也必须同步改变,还要检查新 GPIO 是否被其他硬件占用。
-
**VCC 和 GND:**它们不是可以随意替换的普通 GPIO。供电电压、共同地和模块电气限制必须保留。
我重新走线后确认的当前接口如下:
| GMT130/ST7789 | ESP32-S3 | 类别 |
|---|---|---|
| GND | GND | 回路与共同参考 |
| VCC | 3V3 | 模块供电 |
| SCK | GPIO9 | SPI 时钟 |
| SDA | GPIO10 | SPI 数据写入 |
| RES | GPIO11 | 控制器复位 |
| DC | GPIO12 | 命令/数据选择 |
| BLK | 3V3 | 背光常亮 |
重新走线时,我调整了七根线的起点、终点和路径,也把原来的多股线换成了面包板专用线材。重新上电后,屏幕仍然像使用原来线材时一样变换颜色。

重新走线后,GMT130 与 ESP32-S3 之间改用较短的面包板专用线材,线路主要贴近面包板排列。
这两天真正增加的,不是屏幕的新功能。屏幕仍然只是循环显示颜色。真正的进展是,我开始理解这些针脚背后的基础知识,也能更轻松地自己规划线路。
实际走线只花了五分钟,前面的两天却没有浪费。因为以后再遇到相似问题时,我不必只盯着一张接线表照抄。我可以先识别供电、参考、控制和数据,再判断哪些端点固定、哪些信号能够在同步修改代码后重新选择。
最后,用这五个问题检查自己的接线
-
我确认了屏幕的具体型号、控制器、接口和允许电压吗?
-
VCC、GND、BLK、RES、SCK、SDA、DC 分别属于哪一类?
-
ESP32 与屏幕是否共地,供电是否使用已经确认的电压?
-
如果更换了 SCK、SDA、RES 或 DC 的 GPIO,代码是否同步修改?
-
上电后,我能否区分“背光亮”和“像素画面真正写入成功”?
当这五个问题都能回答时,七根线就不再是一张只能照抄的接线表,而是一条可以自己解释、自己规划、自己检查的显示链路。
资料来源与适用边界
本文中的具体 GPIO、3.3 V 供电、SPI Mode 3 和显示结果,只覆盖我实际使用并验证的 GMT130-V1.0、ESP32-S3 N16R8 开发板及对应软件环境。不同屏幕模块即使同样使用 ST7789,也应先核对自己的模块资料。