显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。
液晶显示器,简称LCD(Liquid Crystal Display),相对于上一代CRT显示器(阴极射线管显示器),LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备。
液晶屏幕显示结构如下图所示

LED点阵彩色显示器的单个像素点内包含红绿蓝三色LED灯,显示原理类似我们实验板上的LED彩灯, 通过控制红绿蓝颜色的强度进行混色,实现全彩颜色输出,多个像素点构成一个屏幕。
新一代的OLED显示器与LED点阵彩色显示器的原理类似,但由于它采用的像素单元是“有机发光二极管”(Organic Light Emitting Diode),所以像素密度比普通LED点阵显示器高得多,结构如下图:

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

完整的显示屏由液晶显示面板、电容触摸面板以及PCB底板构成。
PCB底板上可能会带有“液晶控制器芯片”。因为控制液晶面板需要比较多的资源,所以大部分低级微控制器都不能直接控制液晶面板,需要额外配套一个专用液晶控制器来处理显示过程,外部微控制器只要把它希望显示的数据直接交给液晶控制器即可。
液晶面板信号线如下表所示:
| 信号名称 | 说明 |
|---|---|
| R[7:0] | 红色数据 |
| G[7:0] | 绿色数据 |
| B[7:0] | 蓝色数据 |
| CLK | 像素同步时钟信号 |
| HSYNC | 水平同步信号 |
| VSYNC | 垂直同步信号 |
| DE | 数据使能信号 |
详解如下:
一帧图像传输时序如下图所示:

液晶屏显示的图像可看作一个矩形,结合图 液晶数据传输图解 来理解。液晶屏有一个显示指针,它指向将要显示的像素。 显示指针的扫描方向方向从左到右、从上到下,一个像素点一个像素点地描绘图形。这些像素点的数据通过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的个数 |
液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,这种存储显示数据的存储器被称为显存。显存一般至少要能存储液晶屏的一帧显示数据,如分辨率为800x480的液晶屏,使用RGB888格式显示,它的一帧显示数据大小为:3x800x480=1152000字节;若使用RGB565格式显示,一帧显示数据大小为:2x800x480=768000字节。
STM32F767系列芯片内部自带一个LTDC液晶控制器,使用SDRAM的部分空间作为显存,可直接控制液晶面板,无需额外增加液晶控制器芯片。
STM32的LTDC液晶控制器最高支持800x600分辨率的屏幕;可支持多种颜色格式,包括RGB888、RGB565、ARGB8888和ARGB1555等(其中的“A”是指透明像素);
STM32的LTDC液晶控制器支持2层显示数据混合,利用这个特性,可高效地做出背景和前景分离的显示效果,如以视频为背景,在前景显示弹幕。
LTDC外设支持2层数据混合,混合前使用2层数据源,分别为前景层和背景层。混合时,直接用前景层中的不透明像素替换相同位置的背景像素;而前景层中透明像素的位置,则使用背景的像素数据,即显示背景层的像素。原理如下图所示:

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 |
LTDC框图标号表示的是图像处理单元,它通过“AHB接口”获取显存中的数据,然后按分层把数据分别发送到两个“层FIFO”缓存,每个FIFO可缓存64x32位的数据,接着从缓存中获取数据交给“PFC”(像素格式转换器),它把数据从像素格式转换成字(ARGB8888)的格式,再经过“混合单元”把两层数据合并起来,最终混合得到的是单层要显示的数据,通过信号线输出到液晶面板。
LTDC外设使用3种时钟信号,包括AHB时钟、APB2时钟及像素时钟LCD_CLK。
LCD_CLK时钟来源

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

FG FIFO(Foreground FIFO)与BG FIFO(Backgroun FIFO)是两个64x32位大小的缓冲区,它们用于缓存从AHB总线获取的像素数据,分别专用于缓冲前景层和背景层的数据源。
FG PFC(FG Pixel Format Convertor)与BG PFC(BG Pixel Format Convertor)是两个像素格式转换器,分别用于前景层和背景层的像素格式转换,不管从FIFO的数据源格式如何,都把它转化成字的格式(即32位),ARGB8888。
FIFO中的数据源经过PFC像素格式转换器后,前景层和背景层的图像都输入到混合器中运算。公式如下:
OUT PFC是输出像素格式转换器,它把混合器转换得到的图像转换成目标格式,如ARGB8888、RGB888、RGB565、ARGB1555或ARGB4444。
STM32F767芯片使用LTDC、DMA2D及RAM存储器,构成了一个完整的液晶控制器。LTDC负责不断刷新液晶屏,DMA2D用于图像数据搬运、混合及格式转换,RAM存储器作为显存。其中显存可以使用STM32芯片内部的SRAM或外扩SDRAM/SRAM,只要容量足够大即可。
/**
* @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;
/**
* @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;
/**
* @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;
野火的液晶屏实物如下图所示:

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

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

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

接口说明如下:

排线接口如下图所示:

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

由于液晶屏的部分引脚与实验板的CAN芯片信号引脚相同,所以使用液晶屏的时候不能使用CAN通讯。
打开STM32CubeMX,在Multimedia中打开LTDC 参数设置,如下图所示:

参数设置如下:
层参数如下图所示:

设置如下图所示:
