4. 硬件连接实战:MCU与LCD模块的SPI引脚连接、电平匹配与去耦电容布局
好,咱们进入第四讲。前面几章我们把SPI协议和LCD驱动的基本原理捋了一遍,从这章开始,要真刀真枪地焊板子、接线了。
硬件连接这事儿,看着简单——不就是几根线嘛。但我跟你说,我见过太多项目死在这个环节。线接对了,程序一跑就亮;线接错了,查三天三夜找不到原因。所以这一章,咱们把每个细节都掰开揉碎了讲。
4.1 SPI引脚连接:标准四线制与可选引脚
先看一张标准的SPI连接图,心里有个全局概念。
这张图基本覆盖了标准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),放在板级电源入口即可。
我画了一个布局示意图,大家感受一下。
4.3.2 布局的几条铁律
- 电容要放在芯片同一面,不要放在背面通过过孔连接,过孔会增加寄生电感。
- 走线先过电容,再到芯片。电源从板级入口先经过10µF电容,再到0.1µF电容,最后进芯片。
- 地线要粗。GND走线宽度至少1mm,如果条件允许,用覆铜地平面。
- 多个电容并联:如果空间允许,可以放两个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状态不确定 |