Dr.Guo's Blog

STM32F7学习笔记14:LTDC液晶显示

2025/11/05
4
0

STM32F7学习笔记14:LTDC液晶显示

1. 显示器介绍

显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。

1.1 液晶显示器

液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器),LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备。

液晶屏幕显示结构如下图所示

1.2 LED显示屏

LED点阵彩色显示器的单个像素点内包含红绿蓝三色LED灯,显示原理类似我们实验板上的LED彩灯, 通过控制红绿蓝颜色的强度进行混色,实现全彩颜色输出,多个像素点构成一个屏幕。

1.3 OLED显示屏

新一代的OLED显示器与LED点阵彩色显示器的原理类似,但由于它采用的像素单元是“有机发光二极管”(Organic Light Emitting Diode),所以像素密度比普通LED点阵显示器高得多,结构如下图:

2. 显示器基本参数

  • 像素:像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,即前面讲解液晶原理中提到的一个显示单元
  • 分辨率:一些嵌入式设备的显示器常常以“行像素值x列像素值”表示屏幕的分辨率。如分辨率800x480表示该显示器的每一行有800个像素点,每一列有480个像素点,也可理解为有800列,480行。
  • 色彩深度:色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bit)来表示
  • 尺寸:显示器的大小一般以英寸表示,如5英寸、21英寸、24英寸等,这个长度是指屏幕对角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。
  • 点距:点距指两个相邻像素点之间的距离,它会影响画质的细腻度及观看距离,相同尺寸的屏幕,若分辨率越高,则点距越小,画质越细腻。

3. 液晶显示控制原理

3.1 显示原理

液晶面板的结构如下图所示:

完整的显示屏由液晶显示面板、电容触摸面板以及PCB底板构成。

PCB底板上可能会带有“液晶控制器芯片”。因为控制液晶面板需要比较多的资源,所以大部分低级微控制器都不能直接控制液晶面板,需要额外配套一个专用液晶控制器来处理显示过程,外部微控制器只要把它希望显示的数据直接交给液晶控制器即可。

3.2 控制信号

液晶面板信号线如下表所示:

信号名称 说明
R[7:0] 红色数据
G[7:0] 绿色数据
B[7:0] 蓝色数据
CLK 像素同步时钟信号
HSYNC 水平同步信号
VSYNC 垂直同步信号
DE 数据使能信号

详解如下:

  1. RGB信号:GB信号线各有8根,分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量。
  2. 同步时钟信号CLK:液晶屏与外部使用同步通讯方式,以CLK信号作为同步时钟,在同步时钟的驱动下,每个时钟传输一个像素点数据。
  3. 水平同步信号HSYNC:水平同步信号HSYNC(Horizontal Sync)用于表示液晶屏一行像素数据的传输结束,每传输完成液晶屏的一行像素数据时,HSYNC会发生电平跳变,如分辨率为800x480的显示屏(800列,480行),传输一帧的图像HSYNC的电平会跳变480次。
  4. 垂直同步信号VSYNC:垂直同步信号VSYNC(Vertical Sync)用于表示液晶屏一帧像素数据的传输结束,每传输完成一帧像素数据时,VSYNC会发生电平跳变。
  5. 数据使能信号DE:数据使能信号DE(Data Enable)用于表示数据的有效性,当DE信号线为高电平时,RGB信号线表示的数据有效。

3.3 数据传输时序

一帧图像传输时序如下图所示:

液晶屏显示的图像可看作一个矩形,结合图 液晶数据传输图解 来理解。液晶屏有一个显示指针,它指向将要显示的像素。 显示指针的扫描方向方向从左到右、从上到下,一个像素点一个像素点地描绘图形。这些像素点的数据通过RGB数据线传输至液晶屏, 它们在同步时钟CLK的驱动下一个一个地传输到液晶屏中,交给显示指针,传输完成一行时, 水平同步信号HSYNC电平跳变一次,而传输完一帧时VSYNC电平跳变一次。

过程如下图所示:

液晶通讯中的时间参数如下表所示:

时间参数 参数说明
VBP (vertical back porch) 表示在一帧图像开始时,垂直同步信号以后的无效的行数
VFP (vertical front porch) 表示在一帧图像结束后,垂直同步信号以前的无效的行数
HBP (horizontal back porch) 表示从水平同步信号开始到一行的有效数据开始之间的CLK的个数
HFP (horizontal front porth) 表示一行的有效数据结束到下一个水平同步信号开始之间的CLK的个数
VSW (vertical sync width) 表示垂直同步信号的宽度,单位为行
HSW (horizontal sync width) 表示水平同步信号的宽度,单位为同步时钟CLK的个数

3.4 显存

液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,这种存储显示数据的存储器被称为显存。显存一般至少要能存储液晶屏的一帧显示数据,如分辨率为800x480的液晶屏,使用RGB888格式显示,它的一帧显示数据大小为:3x800x480=1152000字节;若使用RGB565格式显示,一帧显示数据大小为:2x800x480=768000字节。

4. LTDC液晶控制器简介

4.1 介绍

STM32F767系列芯片内部自带一个LTDC液晶控制器,使用SDRAM的部分空间作为显存,可直接控制液晶面板,无需额外增加液晶控制器芯片。

STM32的LTDC液晶控制器最高支持800x600分辨率的屏幕;可支持多种颜色格式,包括RGB888、RGB565、ARGB8888和ARGB1555等(其中的“A”是指透明像素);

STM32的LTDC液晶控制器支持2层显示数据混合,利用这个特性,可高效地做出背景和前景分离的显示效果,如以视频为背景,在前景显示弹幕。

4.2 图像数据混合

LTDC外设支持2层数据混合,混合前使用2层数据源,分别为前景层和背景层。混合时,直接用前景层中的不透明像素替换相同位置的背景像素;而前景层中透明像素的位置,则使用背景的像素数据,即显示背景层的像素。原理如下图所示:

4.3 LTDC控制器结构

LTDC控制器结构主要包含信号线、图像处理单元、寄存器和时钟信号,如下图所示:

1. LTDC信号线

LTDC的控制信号线与液晶显示面板的数据线一一对应,包含有RGB各8根数据线、HSYNC、VSYNC、DE及CLK。

STM32F7对应的LTDC信号线引脚如下表所示:

引脚号 LTDC信号 引脚号 LTDC信号 引脚号 LTDC信号 引脚号 LTDC信号
PA3 LCD_B5 PE11 LCD_G3 PH14 LCD_G3 PJ4 LCD_R5
PA4 LCD_VSYNC PE12 LCD_B4 PH15 LCD_G4 PJ5 LCD_R6
PA6 LCD_G2 PE13 LCD_DE PI0 LCD_G5 PJ6 LCD_R7
PA8 LCD_R6 PE14 LCD_CLK PI1 LCD_G6 PJ7 LCD_G0
PA11 LCD_R4 PE15 LCD_R7 PI2 LCD_G7 PJ8 LCD_G1
PA12 LCD_R5 PF10 LCD_DE PI4 LCD_B4 PJ9 LCD_G2
PB8 LCD_B6 PG6 LCD_R7 PI5 LCD_B5 PJ10 LCD_G3
PB9 LCD_B7 PG7 LCD_CLK PI6 LCD_B6 PJ11 LCD_G4
PB10 LCD_G4 PG10 LCD_B2 PI7 LCD_B7 PJ12 LCD_B0
PB11 LCDG5 PG11 LCD_B3 PI9 LCD_VSYNC PJ13 LCD_B1
PC6 LCD_HSYNC PG12 LCD_B1 PI10 LCD_HSYNC PJ14 LCD_B2
PC7 LCD_G6 PH2 LCD_R0 PI12 LCD_HSYNC PJ15 LCD_B3
PC10 LCD_R2 PH3 LCD_R1 PI13 LCD_VSYNC PK0 LCD_G5
PD3 LCD_G7 PH8 LCD_R2 PI14 LCD_CLK PK1 LCD_G6
PD6 LCD_B2 PH9 LCD_R3 PI15 LCD_R0 PK2 LCD_G7
PD10 LCD_B3 PH10 LCD_R4 PJ0 LCD_R1 PK3 LCD_B4
PE4 LCD_B0 PH11 LCD_R5 PJ1 LCD_R2 PK4 LCD_B5
PE5 LCD_G0 PH12 LCD_R6 PJ2 LCD_R3 PK5 LCD_B6
PE6 LCD_G1 PH13 LCD_G2 PJ3 LCD_R4 PK6 LCD_B7

2. 图像处理单元

LTDC框图标号表示的是图像处理单元,它通过“AHB接口”获取显存中的数据,然后按分层把数据分别发送到两个“层FIFO”缓存,每个FIFO可缓存64x32位的数据,接着从缓存中获取数据交给“PFC”(像素格式转换器),它把数据从像素格式转换成字(ARGB8888)的格式,再经过“混合单元”把两层数据合并起来,最终混合得到的是单层要显示的数据,通过信号线输出到液晶面板。

3. 时钟信号

LTDC外设使用3种时钟信号,包括AHB时钟、APB2时钟及像素时钟LCD_CLK。

  • AHB时钟用于驱动数据从存储器存储到FIFO
  • APB2时钟用于驱动LTDC的寄存器
  • LCD_CLK用于生成与液晶面板通讯的同步时钟

LCD_CLK时钟来源

5. DMA 2D图像加速器

STM32专门定制了DMA2D外设,它可用于快速绘制矩形、直线、分层数据混合、数据复制以及进行图像数据格式转换,可以把它理解为图形专用的DMA。

5.1 DMA 2D结构

DMA2D结构如下图所示:

1. FG FIFO与BG FIFO

FG FIFO(Foreground FIFO)与BG FIFO(Backgroun FIFO)是两个64x32位大小的缓冲区,它们用于缓存从AHB总线获取的像素数据,分别专用于缓冲前景层和背景层的数据源。

2. FG PFC与BG PFC

FG PFC(FG Pixel Format Convertor)与BG PFC(BG Pixel Format Convertor)是两个像素格式转换器,分别用于前景层和背景层的像素格式转换,不管从FIFO的数据源格式如何,都把它转化成字的格式(即32位),ARGB8888。

3. 混合器

FIFO中的数据源经过PFC像素格式转换器后,前景层和背景层的图像都输入到混合器中运算。公式如下:

\begin{array}{c} \alpha_{\text {Mult }}=\frac{\alpha_{F G} \cdot \alpha_{B G}}{255} \\ \alpha_{\text {OUT }}=\alpha_{F G}+\alpha_{B G}-\alpha_{\text {Mult }} \\ C_{\text {OUT }}=\frac{C_{F G} \cdot \alpha_{F G}+C_{B G} \cdot \alpha_{B G}-C_{B G} \cdot \alpha_{M u l t}}{\alpha_{O U T}}\\ \quad \text { 其中 } C=R \text { 或 } G \text { 或 } B \end{array}

4. OUT PFC

OUT PFC是输出像素格式转换器,它把混合器转换得到的图像转换成目标格式,如ARGB8888、RGB888、RGB565、ARGB1555或ARGB4444。

STM32F767芯片使用LTDC、DMA2D及RAM存储器,构成了一个完整的液晶控制器。LTDC负责不断刷新液晶屏,DMA2D用于图像数据搬运、混合及格式转换,RAM存储器作为显存。其中显存可以使用STM32芯片内部的SRAM或外扩SDRAM/SRAM,只要容量足够大即可。

6. 软件相关

6.1 LTDC初始化结构体

/**
   * @brief  LTDC Init structure definition
   */
typedef struct
{
   uint32_t HSPolarity;             /*配置行同步信号HSYNC的极性 */
   uint32_t VSPolarity;             /*配置垂直同步信号VSYNC的极性 */
   uint32_t DEPolarity;             /*配置数据使能信号DE的极性*/
   uint32_t PCPolarity;             /*配置像素时钟信号CLK的极性 */
   uint32_t HorizontalSync;         /*配置行同步信号HSYNC的宽度(HSW-1) */
   uint32_t VerticalSync;          /*配置垂直同步信号VSYNC的宽度(VSW-1) */
   uint32_t AccumulatedHBP;         /*配置(HSW+HBP-1)的值*/
   uint32_t AccumulatedVBP;         /*配置(VSW+VBP-1)的值*/
   uint32_t AccumulatedActiveW;     /*配置(HSW+HBP+有效宽度-1)的值*/
   uint32_t AccumulatedActiveH;     /*配置(VSW+VBP+有效高度-1)的值*/
   uint32_t TotalWidth;             /*配置(HSW+HBP+有效宽度+HFP-1)的值*/
   uint32_t TotalHeigh;             /*配置(VSW+VBP+有效高度+VFP-1)的值*/
   uint32_t Backcolor;               /*配置背景颜色值*/
} LTDC_InitTypeDef;

6.2 LTDC层级初始化结构体

/**
* @brief  LTDC Layer structure definition
*/
typedef struct
{
   uint32_t WindowX0;            /*配置窗口的行起始位置 */
   uint32_t WindowX1;            /*配置窗口的行结束位置 */
   uint32_t WindowY0;            /*配置窗口的垂直起始位置 */
   uint32_t WindowY1;            /*配置窗口的垂直束位置 */
   uint32_t PixelFormat;         /*配置当前层的像素格式*/
   uint32_t Alpha;               /*配置当前层的透明度Alpha常量值*/
   uint32_t Alpha0;              /*配置当前层的默认透明值*/
   uint32_t BlendingFactor_1;    /*配置混合因子BlendingFactor1 */
   uint32_t BlendingFactor_2;    /*配置混合因子BlendingFactor2 */
   uint32_t FBStartAdress;       /*配置当前层的显存起始位置*/
   uint32_t ImageWidth;          /*配置当前层的图像宽度 */
   uint32_t ImageHeight;         /*配置当前层的图像高度*/
   LTDC_ColorTypeDef   Backcolor;/* 配置当前层的背景颜色*/
} LTDC_LayerCfgTypeDef;

6.3 DMA2D初始化结构体

/**
   * @brief  DMA2D Init structure definition
   */
typedef struct
{
   uint32_t Mode;             /*配置DMA2D的传输模式*/
   uint32_t ColorMode;        /*配置DMA2D的颜色模式 */
   uint32_t OutputOffset;     /*配置输出图像的偏移量*/
   uint32_t AlphaInverted;    /*为输出像素格式转换器选择常规或反转 alpha 值*/
   uint32_t RedBlueSwap;      /*选择常规模式 (RGB 或 ARGB) 或交换模式 (BGR 或 ABGR)*/
} DMA2D_InitTypeDef;

7. 硬件相关

7.1 液晶屏介绍

1. 简介

野火的液晶屏实物如下图所示:

液晶屏实物图 液晶屏背面的PCB电路对应 升压电路原理图、电容屏接口、液晶屏接口、液晶排线接口 。

2. 升压电路

升压电路把输入的5V电源升压为20V,输出到液晶8屏的背光灯中;触摸屏及液晶屏接口通过FPC插座把两个屏的排线连接到PCB电路板上, 这些FPC插座与信号引出到屏幕右侧的排针处,方便整个屏幕与外部器件相连。升压电路原理如下图所示:

升压电路中的BK引脚可外接PWM信号,控制液晶屏的背光强度,BK为高电平时输出电压。原理如下图所示:

3. 电容屏接口

电容触摸屏使用I2C通讯,它的排线接口包含了I2C的通讯引脚SCL、SDA,还包含控制触摸屏芯片复位的RSTN信号以及触摸中断信号INT。接口如下图所示:

接口说明如下:

4. 排线接口

排线接口如下图所示:

开发板的电容屏原理如下图所示:

由于液晶屏的部分引脚与实验板的CAN芯片信号引脚相同,所以使用液晶屏的时候不能使用CAN通讯。

8. HAL设置LTDC

8.1 STM32CubeMX设置

1. 参数设置

打开STM32CubeMX,在Multimedia中打开LTDC 参数设置,如下图所示:

参数设置如下:

  • 像素格式:ARGB888
  • 屏宽Active Width:800
  • Horizontal Synchronization for Width: 20
  • Horizontal Back Porch: 46
  • Horizontal Front Porch: 210
  • 屏高Active Height:480
  • Vertical Synchronizaion for Height : 10
  • Vertical Back Porch : 23
  • Vertical Height:480
  • Vertical Front Proch: 22
  • Back Ground Color 255,255,255

2. Layer Setting

层参数如下图所示:

3. 配置DMA2D

设置如下图所示: