硬件连接实战:8位/16位并行总线连接、FSMC接口原理、原理图绘制要点、PCB布局布线注意事项

好,咱们进入第二章。上一章我们把并行接口的时序参数掰开揉碎讲了一遍,这一章就该真刀真枪地画原理图、连板子了。很多同学觉得硬件连接嘛,不就是把线对上就行?其实不然。我见过太多项目,软件调得飞起,结果板子一回来,要么花屏,要么干脆不亮,最后查出来是硬件连接上的低级错误。

这一章,咱们就聊聊怎么把这些线连对、连好,以及背后的原理。

8位 vs 16位并行总线:选哪个?

先解决第一个问题:我的LCD该用8位还是16位?

说白了,这取决于你的应用场景和MCU资源。

对比项 8位并行 16位并行
数据线数量 DB0~DB7,共8根 DB0~DB15,共16根
传输效率 低,一次传1字节 高,一次传2字节
占用GPIO 少(约12~14个) 多(约20~22个)
典型场景 低分辨率、低成本 高分辨率、高刷新率
驱动IC支持 几乎所有都支持 部分高端IC支持

我个人习惯是:如果MCU的GPIO够用,且LCD分辨率超过320x240,我倾向于用16位。为什么呢?因为刷屏速度直接翻倍。我在一个工业HMI项目里试过,同样刷一张800x480的图片,16位比8位快了将近一倍,肉眼可见的流畅。

但如果你用的是STM32F103这种小封装芯片,GPIO本来就紧张,那就老老实实用8位。别为了那点速度把其他功能都牺牲了。

我的经验: 很多LCD驱动IC(比如ILI9341、ST7789)内部其实都是16位数据总线。你用8位模式时,它内部会自动把两个字节拼成一个像素。所以8位模式下,写一个像素需要两次操作,效率自然低。

FSMC接口原理:为什么它能“自动”刷屏?

接下来聊聊FSMC。这玩意儿是STM32等高端MCU的“大杀器”。

FSMC,全称Flexible Static Memory Controller,灵活静态存储控制器。名字很绕,但原理很简单:它让MCU像访问内部SRAM一样去访问外部设备,比如LCD、NOR Flash、SRAM。

为什么会这样?因为FSMC内部有一套自动化的时序发生器。你只需要配置好时序参数(比如建立时间、保持时间),然后往某个内存地址写数据,FSMC就会自动拉高拉低CS、RS、WR、RD这些控制信号,同时把数据放到总线上。

说白了,你写一句:

*(uint16_t *)0x60020000 = 0x1234;

FSMC就会自动完成:

  • 拉低CS(片选)
  • 根据地址判断RS(命令/数据)
  • 拉低WR(写使能)
  • 把0x1234放到数据线上
  • 等待设定的时间
  • 拉高WR和CS

整个过程不需要CPU干预,CPU可以去做别的事。这就是为什么FSMC能“自动”刷屏。

核心要点: FSMC的本质是“地址映射”。你把LCD的寄存器映射到MCU的地址空间里,读写这些地址就等于操作LCD。这比用GPIO模拟时序快得多,而且不占CPU时间。

原理图绘制要点:别让细节毁了你的板子

原理图是硬件设计的起点。我见过太多原理图,看着没问题,一打板就出问题。这里我总结几个关键点。

1. 数据线顺序:别想当然

很多LCD的数据线编号是DB0~DB15,但MCU的FSMC数据线编号是D0~D15。理论上应该一一对应。但有些LCD厂商会“调皮”,比如把DB0和DB1交换。所以画原理图前,一定要仔细看LCD的数据手册,确认数据线的对应关系。

我曾经在一个项目里,没仔细看手册,想当然地把DB0连到D0,结果屏幕显示的颜色完全错乱。查了两天才发现,LCD的DB0其实是LSB,但MCU的D0是MSB。最后在软件里做了位序反转才搞定,但浪费了不少时间。

2. 控制信号:RS、WR、RD、CS

这些信号是并行接口的“指挥系统”。

  • RS(命令/数据选择): 通常接FSMC的地址线A0或A16。我习惯接A0,这样命令地址和数据地址只差1,方便软件操作。
  • WR(写使能): 接FSMC的NWE。
  • RD(读使能): 接FSMC的NOE。
  • CS(片选): 接FSMC的NEx(x为片选号)。

3. 电源和去耦电容

LCD的背光电源和逻辑电源通常需要分开供电。背光电流大,逻辑电源纹波要求高。

每个电源引脚旁边都要放一个0.1μF的去耦电容,靠近引脚放置。大电容(10μF~100μF)放在板子入口处。

警告: 去耦电容不是摆设!我见过一个项目,为了省成本,把去耦电容全去掉了。结果屏幕刷新时,电源纹波高达200mV,导致显示出现横纹。最后不得不飞线补焊电容。

4. 电平匹配

MCU是3.3V,LCD可能是5V或者1.8V。一定要确认电平是否兼容。如果不兼容,需要加电平转换芯片,或者用电阻分压。

PCB布局布线注意事项:让信号跑得稳

原理图画好了,PCB布局布线才是真正的考验。很多硬件工程师觉得“能连通就行”,但高频信号对布线非常敏感。

1. 数据线等长

8位或16位数据线,最好保持等长。尤其是16位模式,数据线之间的长度差不要超过5mm。否则,信号到达LCD的时间不一致,会导致数据采集错误。

我建议:在布线时,先布数据线,用蛇形线调整长度,确保它们长度一致。

2. 控制信号远离数据线

WR、RD、CS这些控制信号,容易受到数据线的串扰。所以,尽量让控制信号走内层,或者用地线隔离。

3. 电源和地平面

如果条件允许,使用完整的电源层和地层。这能大大降低电源阻抗,减少噪声。

如果只有两层板,那就尽量让地线走粗一些,并且用网格地覆盖空白区域。

4. 背光电路单独走线

LCD背光电流通常较大(几百毫安甚至几安),如果和逻辑电路共用走线,容易产生压降和噪声。所以,背光电源和地要单独走线,远离信号线。

我的习惯: 在布局时,先把LCD接口放在板子边缘,方便排线连接。然后,把FSMC相关的MCU引脚尽量靠近LCD接口放置,减少走线长度。

知识结构图:硬件连接全貌

下面这张图,把本章的核心知识点串起来了。你可以把它当作一个检查清单。

并行LCD硬件连接知识结构 并行LCD硬件连接 8位 vs 16位总线 FSMC接口原理 原理图绘制要点 GPIO占用 传输效率 地址映射 自动时序 数据线顺序检查 PCB布局布线 数据线等长 控制信号隔离 电源地平面 背光单独走线

总结一下

硬件连接这事儿,说难不难,说简单也不简单。关键是要细心,把每个细节都考虑到。

  • 选8位还是16位? 看GPIO和性能需求。
  • FSMC怎么用? 理解地址映射,配置好时序。
  • 原理图怎么画? 数据线顺序、控制信号、电源去耦、电平匹配,一个都不能少。
  • PCB怎么布? 等长、隔离、地平面、背光单独走线。