硬件排查第一步:检查LCD接口的物理连接与电压时序
屏幕花屏了,很多人第一反应是改代码。但我做了这么多年嵌入式,可以负责任地告诉你——至少有三成的花屏问题,根源根本不在软件,而在硬件连接上。你想想看,代码跑得好好的,突然花屏了,或者换一块屏就正常了,这大概率是物理层出了问题。
所以这一章,咱们就从最基础的硬件排查开始。别急着动代码,先把万用表、示波器拿出来,咱们一步一步查。
第一步:先看接口类型,再动手
不同的LCD接口,排查重点完全不一样。我习惯先确认当前项目用的是哪种接口,再针对性检查。常见的就这三种:
| 接口类型 | 典型MCU | 常见花屏表现 | 排查优先级 |
|---|---|---|---|
| FMC/FSMC | STM32F4/F7/H7 | 局部花屏、颜色错乱、闪屏 | 高 |
| SPI | 低端MCU、小尺寸屏 | 全屏雪花、刷新慢、撕裂 | 中 |
| RGB | 高性能MCU+外部SDRAM | 条纹、水波纹、颜色偏移 | 极高 |
我个人习惯是:先看原理图,再量物理连接。别上来就拿示波器乱戳,容易短路。
第二步:物理连接排查——别小看一根线
我在项目中遇到过好几次花屏,最后发现就是FMC的某个数据线虚焊了。你想想看,16位数据总线,只要有一根线接触不良,整个画面就会乱掉。
排查步骤我总结成清单,你照着做就行:
- 目检——用放大镜看焊点,有没有冷焊、连锡、虚焊。尤其是FMC的D0-D15、CS、RS、WR、RD这些关键信号。
- 通断测试——用万用表蜂鸣档,从MCU引脚一直量到LCD接口。别只量两端,中间如果有排线、连接器,每个节点都要测。
- 排线检查——FPC排线最容易出问题。我曾经遇到一个案子,排线弯折次数多了,内部有断线,但外表看不出来。换一根排线就好了。
- 连接器压力——按压LCD连接器,如果花屏现象有变化,那就是接触不良。加垫片或者换连接器能解决。
第三步:电压时序——花屏的隐形杀手
物理连接没问题?那咱们查电压和时序。说白了,LCD是个精密的模拟器件,电压不对、时序不对,它就不干活。
3.1 核心电压检查
你需要用示波器(不是万用表)测量以下几个点:
- VCC(3.3V或1.8V)——纹波不能超过50mV。我见过一个项目,电源纹波200mV,屏幕一直闪,加个LC滤波就好了。
- IOVCC(接口电压)——必须和MCU的IO电平匹配。不匹配的话,逻辑电平识别错误,花屏是轻的,严重时可能烧屏。
- VGH/VGL(栅极驱动电压)——这两个电压如果偏低,屏幕会出现从上到下的渐变色花屏。我遇到过,查了三天才发现是DC-DC升压芯片虚焊。
3.2 复位时序
LCD的复位时序非常关键。很多花屏问题,其实就是复位没做好。标准流程是这样的:
// 典型LCD复位时序(以ILI9341为例)
// 1. 拉低RESX至少10us
// 2. 拉高RESX
// 3. 等待120ms以上再发初始化命令
void LCD_Reset(void) {
HAL_GPIO_WritePin(LCD_RESET_GPIO_Port, LCD_RESET_Pin, GPIO_PIN_RESET);
delay_us(20); // 至少10us,我习惯给20us
HAL_GPIO_WritePin(LCD_RESET_GPIO_Port, LCD_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(150); // 至少120ms,我习惯给150ms
// 然后才能发初始化序列
}
为什么会这样?因为LCD内部的驱动IC上电后,需要时间稳定内部寄存器。如果复位时间不够,寄存器值可能是随机的,画面自然就花了。
3.3 接口时序——示波器是最后的裁判
如果以上都查了还花屏,那就得上示波器抓时序了。以FMC为例,你需要看:
- CS片选信号——低电平有效,宽度是否足够?
- WR写信号——低电平脉冲宽度是否满足LCD datasheet要求?
- 数据建立时间——数据在WR上升沿之前是否已经稳定?
我习惯把示波器时基调到100ns/div,抓一个完整的写周期。如果发现建立时间不够,就去STM32CubeMX里调整FMC的时序参数:
// FMC时序配置示例(STM32CubeMX生成)
// 关键参数:DataSetupTime、AddressSetupTime、BusTurnAroundDuration
sram.Timing.DataSetupTime = 6; // 数据建立时间,单位HCLK周期
sram.Timing.AddressSetupTime = 3; // 地址建立时间
sram.Timing.BusTurnAroundDuration = 1;
嗯,这里要注意:不同LCD的时序要求不一样。有的屏要求DataSetupTime至少5个HCLK,有的3个就够了。一定要看datasheet,别照搬别人的配置。
本章核心逻辑图
下面这张图,是我自己总结的排查流程。每次遇到花屏,我就按这个顺序走一遍,基本能定位90%的硬件问题。
避坑指南
最后,分享几个我踩过的坑:
- 我曾经遇到一个项目,花屏只在低温下出现。查了三天,发现是LCD的VGH电容在低温下容值下降,导致电压纹波变大。换了宽温电容就好了。
- 我曾经被一根FPC排线坑了两个月。排线外观完好,但内部有一根地线断了,导致信号回流路径变长,高速信号辐射干扰了数据线。换排线解决。
- 注意:有些LCD模块内部自带电平转换,有些没有。如果MCU是3.3V,LCD是1.8V,中间必须加电平转换芯片。我见过直接连的,烧了三个屏才反应过来。