2026-08-16
硬件-通讯电路
0

目录

一、各引脚功能定义
控制信号(4 根)
数据信号(24 根,RGB888)
二、两种同步模式(屏端决定怎么接)
三、RGB888 显示驱动流程
步骤1. 时钟与电源准备
步骤2. GPIO 复用配置
步骤3. LTDC 全局时序配置(按屏 datasheet 填)
步骤4. 显存(Frame Buffer)分配
步骤5. 图层(Layer)配置
步骤6. 使能 LTDC 控制器
步骤7. 运行时更新画面
四、RGB888 项目里的几个硬坑提醒

  STM32H750 的 LCD-TFT 控制器是 LTDC,RGB888 模式下一共输出 28 根信号线:24 根数据(R0-7/G0-7/B0-7)+ 4 根控制(CLK/HSYNC/VSYNC/DE)。STM32H7区别于F4/F7最硬核的显示能力;而“一体化”三个字,不是营销话术,是指LCD刷新和触摸采样在同一个时钟域下协同调度,避免了传统方案中SPI触摸轮询抢占LTDC DMA 通道导致的撕裂或丢点问题。

  • 层 FIFO:每层一个 64x64 位 FIFO。
  • PFC:执行像素格式转换的像素格式转换器,从层的所选输入像素格式转换为字。
  • AXI 接口:用于将数据从存储器传输到 FIFO。

一、各引脚功能定义

控制信号(4 根)

  • CLK(LCD_CLK / DOTCLK):像素时钟,每个上升沿(或按极性配置)锁存一个像素的 RGB 数据。频率由屏分辨率×刷新率决定,H750 上由 PLL3_R​ 分频得到,常见 9~50 MHz。

  • HSYNC(水平同步):行同步脉冲。每开始扫描新的一行,HSYNC 跳变一次(极性可配)。标志“一行开始”,用于界定行消隐区。

  • VSYNC(垂直同步):场同步脉冲。每开始一新帧(整屏),VSYNC 跳变一次。标志“一帧开始”,用于界定场消隐区。

  • DE(Data Enable,数据使能):高电平期间 RGB 线上数据是有效像素;低电平期间是消隐区,屏忽略 RGB 值。现代 TFT 大多用 DE 模式,HSYNC/VSYNC 可省(但 H750 LTDC 通常同时输出,屏端看它支持哪种)。

数据信号(24 根,RGB888)

  • R0–R7:红色分量,8 位,R7 为 MSB

  • G0–G7:绿色分量,8 位,G7 为 MSB

  • B0–B7:蓝色分量,8 位,B7 为 MSB

每个 CLK 上升沿,这三组总线上的 24 位值 = 当前像素的颜色(0xRRGGBB)。如果屏只支持 RGB565,可以把 R0-2、G0-1、B0-2 接地或悬空,LTDC 也可直接配成 RGB565 输出省引脚。

二、两种同步模式(屏端决定怎么接)

  • DE 模式(常用):只靠 CLK + DE 界定有效像素区,HSYNC/VSYNC 可不接屏(但 LTDC 内部仍要配时序)。接线简单、抗干扰好。

  • HV 模式(SYNC 模式):靠 HSYNC+VSYNC 脉冲边沿推进行/帧,DE 可不用。老式屏或 VGA 转接用。

  • 很多屏两者都吃,但同时有 DE 和 H/V 时优先 DE 模式。

三、RGB888 显示驱动流程

步骤1. 时钟与电源准备

  • 配置 PLL3_R​ 输出 LTDC 像素时钟(如 480×272@60Hz ≈ 9 MHz,1024×600@60Hz ≈ 51 MHz)。

  • 使能 LTDC 总线时钟(AHB3)、GPIO 时钟。

  • 屏端供电:先 DVDD/AVDD 稳定,再开 VGH/VGL,最后 PWM 渐亮背光(避免上电闪白)。

步骤2. GPIO 复用配置

  • 把 R0-7/G0-7/B0-7/CLK/HSYNC/VSYNC/DE 全部设为 AF14(LTDC)推挽、无上下拉、VERY_HIGH 速度。速度不够高速屏会竖纹/偏色。

步骤3. LTDC 全局时序配置(按屏 datasheet 填)

一行总周期 = HSYNC_WIDTH + H_BACK_PORCH + H_ACTIVE(如800) + H_FRONT_PORCH

一帧总周期 = VSYNC_WIDTH + V_BACK_PORCH + V_ACTIVE(如480) + V_FRONT_PORCH

同时配置:

  • 同步极性(HSYNC/VSYNC/DE/CLK 高有效还是低有效,必须和屏一致)
  • 背景色(BCCR,无图层覆盖时显示的底色)

步骤4. 显存(Frame Buffer)分配

  • RGB888 下每像素 3 字节(或按 ARGB8888 用 4 字节更方便 DMA2D)。

  • H750 内部 SRAM 不够,通常放在外部 SDRAM(FMC 驱动),首地址对齐 64 字节以上。

  • 显存不需要 CPU 每帧搬运,LTDC 会自动按行扫描从显存读数据送到屏上。

步骤5. 图层(Layer)配置

LTDC 有 2 个硬件图层(Layer1/2),一般只用 Layer1:

  • 窗口位置(在屏有效区内的 x0/y0/x1/y1)

  • 像素格式 = RGB888(或 ARGB8888)

  • 帧缓冲起始地址 = 显存首地址

  • 行长度(Line Length)与行间距(Pitch,字节数)

  • 行数(CFBLNR)

  • Alpha / 混合系数(单层不混合可设 Alpha=255)

  • 可选:CLUT 关闭、抖动(dithering)开/关

配完写影子寄存器重载(SRCR),再使能图层。

步骤6. 使能 LTDC 控制器

  • 置 GCR 的 LTDCEN 位,时序发生器开始跑:按配置发 CLK/HSYNC/VSYNC/DE,并从显存读像素送 RGB 总线。

  • 屏看到有效 DE+CLK+RGB 即显示内容。

步骤7. 运行时更新画面

  • GUI/CPU 直接写显存对应像素(如 (x,y) 地址写 0x00RRGGBB)。

  • 大量填充/拷贝用 **DMA2D(Chrom-ART)**​ 加速,不占 CPU。

  • 防撕裂:双缓冲,VSYNC 中断里切换 Layer 的 CFBAR 到另一块显存,再 SRCR 重载。

四、RGB888 项目里的几个硬坑提醒

  • 极性配反​ → 花屏/偏移;务必按屏手册设 HPOL/VPOL/DEPOL/PCPOL。

  • 时序参数不按屏填(尤其中小厂屏写“典型值”而非寄存器值)→ 滚动/抖动。

  • 显存放 DTCM​ → LTDC 不能访问 TCM,必须放 AXI 可达的 SDRAM 或 AXI SRAM。

  • RGB888 却只接 16 位屏​ → 要么 LTDC 改 RGB565,要么屏端 COLMOD 配成 RGB888 输入(多数消费屏实际是 RGB666 内部抖色)。

  • CLK 速度等级​ → GPIO 必须 VERY_HIGH,走线等长不必严求但 CLK 别比 RGB 长太多。

本文作者:ZeroEngineer

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!