4. 硬件连接实战:MCU与LCD模块的SPI引脚连接、电平匹配与去耦电容布局

好,咱们进入第四讲。前面几章我们把SPI协议和LCD驱动的基本原理捋了一遍,从这章开始,要真刀真枪地焊板子、接线了。

硬件连接这事儿,看着简单——不就是几根线嘛。但我跟你说,我见过太多项目死在这个环节。线接对了,程序一跑就亮;线接错了,查三天三夜找不到原因。所以这一章,咱们把每个细节都掰开揉碎了讲。

4.1 SPI引脚连接:标准四线制与可选引脚

先看一张标准的SPI连接图,心里有个全局概念。

MCU与LCD模块SPI连接示意图 MCU 主控 (3.3V / 5V) SCLK MOSI MISO CS DC SCLK MOSI MISO CS DC LCD 模块 (3.3V / 5V) SCLK MOSI MISO CS DC 电源 VCC → 3.3V/5V GND → GND 去耦电容 0.1µF + 10µF ⚠ 注意:MISO 引脚在部分 LCD 模块上为 NC(悬空),若模块只写不读,可省略此线。

这张图基本覆盖了标准SPI LCD的连接方式。我一个个引脚说。

4.1.1 核心四线:SCLK、MOSI、MISO、CS

  • SCLK(时钟线):MCU产生时钟,LCD接收。注意时钟极性(CPOL)和相位(CPHA)要匹配。大部分LCD模块默认是模式0(CPOL=0, CPHA=0),也就是空闲时时钟为低,第一个边沿采样。
  • MOSI(主出从入):MCU发数据给LCD。这条线是单向的,只写不读。
  • MISO(主入从出):LCD回传数据给MCU。很多廉价LCD模块没有这根线,或者直接悬空。如果你只需要写显示数据,MISO可以不管。
  • CS(片选):低电平有效。MCU拉低CS,LCD才响应SPI通信。我习惯在初始化时先把CS拉高,防止上电瞬间误触发。

我的经验:CS引脚千万别省。有些同学图省事,直接把CS接地,让LCD一直处于选中状态。这样做在单设备时可能能跑,但一旦总线上挂多个SPI设备,数据冲突会让你崩溃。我踩过这个坑,后来老老实实加了个GPIO控制CS。

4.1.2 可选引脚:DC(数据/命令选择)与RST(复位)

DC引脚是LCD驱动里特有的。它告诉LCD:当前SPI发过来的是命令还是数据。

  • DC = 0:发的是命令(比如设置坐标、清屏指令)
  • DC = 1:发的是显示数据(像素颜色值)

RST引脚呢,有些模块有,有些没有。如果有,我建议接上MCU的一个GPIO,上电后先拉低10ms再拉高,确保LCD内部复位完成。不接的话,有些模块上电后状态不确定,第一次初始化可能失败。

4.2 电平匹配:3.3V vs 5V,一个不能忽视的问题

好,接下来聊一个让很多新手翻车的话题——电平匹配。

你想想看,MCU可能是3.3V的(比如STM32、ESP32),LCD模块可能是5V的(比如老款12864、某些TFT屏)。直接连,会怎样?

警告:3.3V的MCU引脚直接接5V的LCD输入引脚,轻则逻辑电平不识别(MCU输出3.3V高电平,LCD认为不够高),重则烧毁MCU引脚!5V的TTL电平高电平阈值是2.0V,但3.3V CMOS输出高电平约3.0V,勉强能用但不安全。反过来,5V MCU接3.3V LCD,直接烧LCD。

我整理了一个电平匹配速查表,大家直接对照着用。

MCU电压 LCD电压 匹配方式 推荐方案
3.3V 3.3V 直连 最理想,直接接线即可
3.3V 5V 需电平转换 MOSI/SCLK/CS用电平转换芯片(如74LVC245)或分压电阻
5V 3.3V 需电平转换 LCD侧加3.3V LDO供电,信号线用电阻分压或电平转换
5V 5V 直连 直连,但注意电流不要超限

4.2.1 我常用的电平转换方案

我个人习惯用电阻分压,简单便宜。比如3.3V MCU输出到5V LCD,在MOSI线上串一个1kΩ电阻,LCD内部有上拉或钳位二极管,基本能工作。但要注意,分压后信号上升沿会变缓,SPI频率不能太高(建议低于1MHz)。

如果SPI频率超过10MHz,老老实实用电平转换芯片。我推荐TXS0108E或74LVC245,双向自动检测,省心。

避坑指南:我曾经在一个项目里,3.3V的STM32直接连5V的LCD,没做电平转换。刚开始能显示,但运行半小时后屏幕开始花屏,最后MCU的SPI引脚烧了。后来查手册才发现,LCD的输入引脚耐压只有5.5V,但3.3V输出在噪声叠加下可能冲到4V以上,长期工作就出问题。从那以后,电平转换我从不省略。

4.3 去耦电容布局:小电容,大作用

去耦电容,说白了就是给芯片提供一个干净的电源。LCD模块在刷新时,电流会瞬间变化,如果电源不稳,屏幕就会出现水波纹、闪烁甚至花屏。

4.3.1 电容怎么选、怎么放

标准做法是:每个电源引脚旁边放一个0.1µF(104)陶瓷电容,再在板级总电源入口放一个10µF~100µF的电解电容。

  • 0.1µF电容:滤除高频噪声(几十MHz到几百MHz),必须紧贴芯片电源引脚,距离不超过5mm。
  • 10µF~100µF电容:滤除低频纹波(几十kHz到几MHz),放在板级电源入口即可。

我画了一个布局示意图,大家感受一下。

去耦电容布局示意 LCD 模块 VCC / GND 0.1µF 紧贴电源引脚 10µF 板级电源入口 VCC GND 电源 💡 关键原则:0.1µF 电容离芯片越近越好,走线越短越好。不要用长引线飞过去,那等于没放。

4.3.2 布局的几条铁律

  1. 电容要放在芯片同一面,不要放在背面通过过孔连接,过孔会增加寄生电感。
  2. 走线先过电容,再到芯片。电源从板级入口先经过10µF电容,再到0.1µF电容,最后进芯片。
  3. 地线要粗。GND走线宽度至少1mm,如果条件允许,用覆铜地平面。
  4. 多个电容并联:如果空间允许,可以放两个0.1µF并联,覆盖更宽的频率范围。

我的习惯:每次画PCB或焊洞洞板,我都会在LCD模块的VCC和GND之间焊一个0.1µF贴片电容,引脚尽量短。如果板子上还有空位,再加一个10µF钽电容。这样做之后,屏幕闪烁的问题基本没再遇到过。

4.4 实战检查清单

最后,给大家一个硬件连接检查清单。每次焊完板子,按这个列表过一遍,能省掉80%的调试时间。

检查项 检查内容 常见错误
电源 VCC电压是否正确?GND是否共地? MCU和LCD各用各的电源,没共地
电平匹配 MCU和LCD电压是否兼容? 3.3V直连5V,长期工作烧引脚
SPI引脚 SCLK、MOSI、CS是否一一对应? MOSI和MISO接反,CS没接GPIO
DC引脚 DC是否接到MCU的GPIO? DC悬空或接固定电平,无法切换命令/数据
去耦电容 0.1µF是否靠近LCD电源引脚? 电容离得太远,或者根本没放
复位电路 RST引脚是否接MCU或RC复位? RST悬空,上电后LCD状态不确定