LTDC协议

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

LTDC简介:LTDC是一种连接MCU和TFT显示屏的显示接口,这也是他名字(LCD TFT Display Controller)的来源。功能是不断地从缓存中获取图像数据发送给显示屏。TFT屏的每个像素由液晶单元和电容组成。当LTDC发送像素数据到TFT屏幕后,电容会维持电压,从而显示缓存中像素点的颜色并一直保持这个颜色。除非程序更新了缓冲区的内容,LTDC会将新数据发送到屏幕,否则LTDC重复发送同一帧数据,屏幕显示不变化(无闪烁或消失)。

分辨率:屏幕像素点的数量(比如800*480....)

色深:一个像素点用多少个位表示(RGB888,RGB565)

帧缓冲区:就是你临时存储一帧图像的地方。所以帧缓冲区需要的大小取决于显示器的分辨率和色深,帧缓冲器更新的频率越高,动画越流畅(动画每秒 帧数)

显示控制器:作用是将帧缓冲区的数据不断发送给屏幕

一般嵌入式图形系统由微控制器、帧缓冲器、显示控制器和显示屏组成,一般有两类图形系统

第一类是显示器自带显示控制器和帧缓冲区

第二类是显示器没带显示控制器和帧缓冲区,显示控制器在MCU里面,帧缓冲区在MCU里面或者实在外部外挂了一个SDRAM/SRAM,外挂RAM类型存储器的原因是RAM读写速度快,满足屏幕刷新速率的要求。

RGBLCD的驱动方式

一般有两种驱动方式:DE模式和HV模式

DE模式:使用DE信号来确定有效数据(DE信号为高时,传输的数据有效),对应下图的上面的那个绿框即后面的时序;DE模式下只需要DE信号,可以不用HSD信号,液晶屏照样显示。

HV模式:需要行同步信号和场同步信号,用于表示的行信号和列信号,对应下图的下面的那个绿框;HV模式下可以不需要DE信号,行同步信号。

下面就是一行数据的时序,每一行数据的开始,会发送一个水平同步有效信号脉宽thpw;再是水平后廊thb,表示水平有效信号开始,到有效数据输出之间的像素时钟个数;再是水平前廊thfp,表示一行数据结束后,到下一个水平同步信号开始之前的像素时钟个数;

上面是一行数据的时序,液晶屏总共有480行数据,下面就是480行数据的时序,其中HSD位水平同步信号,VSD位垂直同步信号(场同步信号),发送时序和行信号的是差不多的。

tvpw是垂直同步有效信号脉宽,表示一帧有效数据的开始;tvb为垂直后廊,表示垂直同步信号的之后的无效行数;tvfp为垂直前廊,表示一帧数据输出结束后,到下一个垂直同步信号开始之前的无效行数

这些参数都是需要配置在LTDC的寄存器里面,这些参数在每个LCD厂商的数据手册上都有。

LTDC主要特性

24 位 RGB 并行像素输出;每像素 8 位 (RGB888)
2 个带有专用 FIFO 的显示层(FIFO 深度 64x32 位)
查色表 (CLUT),每层高达 256 种颜色(256x24 位)
支持高达 XGA (1024x768) 的分辨率
可针对不同显示面板编程时序
可编程背景色
可编程 HSync、VSync 和数据使能信号的极性
每层有多达 8 个输入颜色格式可供选择
– ARGB8888
– RGB888
– RGB565
– ARGB1555
– ARGB4444
– L8(8 位 Luminance 或 CLUT)
– AL44(4 位 alpha + 4 位 luminance)
– AL88(8 位 alpha + 8 位 luminance)
每通道的低位采用伪随机抖动输出
– 红色、绿色、蓝色的抖动宽度为 2 位
使用 alpha 值(每像素或常数)在两层之间灵活混合
色键(透明颜色)
可编程窗口位置和大小
支持薄膜晶体管 (TFT) 彩色显示器
AHB 主接口支持 16 个字的突发
高达 4 个可编程中断事件

LTDC的框图

1,信号线

LCD_CLK:像素时钟输出

LCD_HSYNC:水平同步

LCD_VSYNC:垂直同步

LCD_DE:数据使能

LCD_R[0:7]:红色数据线

LCD_G[0:7]:绿色数据线

LCD_B[0:7]:蓝色数据线

总共有24根数据线,使用大端存储的模式,RGB888模式的下,MCU中RGB的数据线一一对应,当使用RGB565传输时,使用的传输线是高位的传输线,即LTDC 的 LCD_R[7:3]接 RGBLCD 的
R[7:3],LTDC 的 LCD_G[7:2]接 RGBLCD 的 G[7:2],LTDC 的 LCD_B[7:3]接 RGBLCD 的 B[7:3]

2,图像处理单元

数据从总线中获取数据后,经过FIFO缓存。再经过像素格式转换器PFC,把从层的所选输入像素格式转换为转换为ARGB8888 格式。再经过混合单元,先把背景层和第1层混合,再把第2层与背景层和第一层混合的结果再混合(最后需要显示的数据),最后经过抖动单元处理(可选)后,输出给 LCD 显示。简单得说,就是把这三层数据合在一层数据中显示,显示的效果是三层的效果。

ARGB8888:A的数值越大,越不透明,A=255,完全不透明,A=0,完全透明。红,绿,蓝各占8位,表示的颜色深度为 1600W 色。

可以看出背景层再最下面,混合的顺序是由下到上依次混合。

3,AHB接口

由于LTDC驱动的是RGBLCD屏幕,需要很多内存来做显存,比如一个800*480的屏幕,颜色深度是RGB888,就需要800*480*3=1152000个字节,显然单片机是没有这么多内存来做缓存的,即使单片机有这么多的内存,拿来做显存是很浪费的。多数人选择在外部挂载一块SDRAM做缓存。而SDRAN是挂载在AHB总线上的。LTDC上的AHB接口,就是用来把SDRAM中的数据搬运到两个FIFO中的。

4,配置和状态寄存器

上面这张图片是描述的是一帧图像数据要传输的内容(配置LTDC主要就是围绕着下面几个参数配置的)

HSW(HSYNC):水平同步脉宽(水平同步信号)

VSW(VSYNC):垂直同步脉宽(垂直同步型号)

HBP:水平后廊,表示水平同步信号开始到行有效数据开始之间的像素时钟个数

HFP:水平前廊,表示行有效数据结束到下一个水平有效信号开始之前的像素时钟个数

VBP:垂直后廊,表示垂直同步信号后,无效行的个数 

VFP:垂直前廊,表示一帧数据输出结束后,到下一个垂直同步信号开始之前的无效行数。

寄存器介绍

寄存器的一些参数配置需要减一,因为寄存器是从零开始计数的

LTDC同步大小配置寄存器(LTDC_SSCR)

HSW[11:0]:水平同步脉宽 - 1。

VSH[10:0]:垂直同步脉宽 - 1。

LTDC 后沿配置寄存器 (LTDC_BPCR)

AHBP[11:0]:水平同步像素加水平后沿像素的累加数减 1(HSYNC 宽度 + HBP- 1)

AVBP[10:0]:垂直同步行加垂直后沿行的累加数减 1(VSYNC 高度 + VBP - 1)

LTDC 有效宽度配置寄存器 (LTDC_AWCR)

AAW[11:0]:水平同步像素加水平后沿像素加有效像素的累加数减 1(HSYNC 宽度 + HBP + 有效宽度 - 1),有效宽度是面板扫描行的有效显示区中的像素数。支持的最大有效宽度为 0x400。

AAH[10:0]:垂直同步行加垂直后沿行加有效行的累加数减 1(VSYNC 高度+ BVBP +有效高度 - 1),有效高度是面板中的有效行数。支持的最大有效高度为 0x300。

LTDC 总宽度配置寄存器 (LTDC_TWCR)

TOTALW[11:0]:水平同步像素加水平后沿像素加有效像素加水平前沿像素的累加数减 1(HSYNC 宽度 + HBP + 有效宽度 + HFP - 1)

TOTALH[10:0]:垂直同步行加垂直后沿行加有效行加垂直前沿行的累加数减 1(VSYNC 高度 + BVBP + 有效高度 + VFP - 1)

LTDC 全局控制寄存器 (LTDC_GCR)

此寄存器定义 LCD-TFT 控制器的全局配置,(就是配置引脚高电平有效还是低电平有效)

抖动一种通过算法优化图像显示效果的技术,主要用于在颜色深度较低的显示屏上模拟出更丰富的色彩过渡,减少因颜色精度不足导致的带状效应

1.抖动的作用
解决颜色过渡问题:
当显示屏的物理颜色深度(如RGB565,16位色)低于图像数据的颜色深度(如RGB888,24位色)时,直接截断低位会导致颜色阶跃不连续,形成明显的色带。
抖动通过在相邻像素间混合颜色值,利用人眼的视觉暂留效应,在低颜色深度下模拟出更平滑的渐变效果。
提升视觉体验:
在显示渐变背景、阴影或高色彩精度的图像时,抖动能显著减少画面中的“阶梯状”色带,使显示效果更接近原始高精度图像。

2.LTDC抖动的实现原理
硬件级抖动算法:
LTDC内置硬件抖动单元,支持对每个像素的颜色分量(R/G/B)进行动态调整。
常用算法包括误差扩散(Error Diffusion)或模式抖动(Pattern Dithering),例如Floyd-Steinberg算法或Bayer矩阵抖动。
抖动位配置:
例如,若显示屏为RGB565(5位红、6位绿、5位蓝),而输入数据为RGB888(8位每色),LTDC可通过抖动算法将高位数据(8位)映射到低位(5/6位),并添加微小扰动来平滑过渡。

3.抖动的配置与使用
启用抖动功能:
在LTDC控制寄存器(LTDC_GCR)中设置抖动使能位(DTEN),并选择抖动模式(如2x2、3x3或4x4抖动矩阵)。
示例代码(以STM32为例):
// 启用抖动,选择4x4抖动模式
LTDC->GCR |= LTDC_GCR_DTEN;          // 使能抖动
LTDC->GCR |= LTDC_GCR_DITHER_4x4;    // 设置抖动矩阵大小
抖动精度控制:
某些LTDC支持调整抖动强度,通过配置寄存器(如LTDC_DSCR)控制颜色误差扩散的比例。

4.应用场景
低颜色深度显示屏:
驱动16位(RGB565)或18位(RGB666)屏时,需将24位图像数据通过抖动优化输出。
渐变效果显示:
天空、阴影、UI渐变色等场景中,抖动可显著减少色带。
医疗/工业显示:
对图像平滑度要求高的设备(如医疗成像),抖动能提升细节表现。
5. 抖动的优缺点
优点:
以极低的计算开销(硬件实现)改善显示效果。
无需修改原始图像数据,直接在输出阶段处理。
缺点:
可能引入轻微噪声(尤其在静态图像中)。
某些场景下过度抖动可能导致纹理细节模糊。
6. 注意事项
屏显规格匹配:
若显示屏本身支持高颜色深度(如RGB888),则无需启用抖动。
性能权衡:
抖动会增加LTDC的功耗,需根据实际需求选择启用。
测试验证:
在最终产品中需实际测试抖动效果,调整参数以达到最佳视觉体验。

LTDC的抖动功能通过硬件算法优化颜色映射,是低颜色深度显示屏实现高质量图像显示的关键技术。合理启用和配置抖动,能在不增加系统计算负载的前提下,显著提升色彩过渡的平滑性,避免色带问题,适用于消费电子、工业控制等多种显示场景。

位 31 HSPOL:水平同步极性
        此位由软件置 1 和清零。
        0:水平同步极性低电平有效
        1:水平同步极性高电平有效
位 30 VSPOL:垂直同步极性
        此位由软件置 1 和清零。
        0:垂直同步低电平有效
        1:垂直同步高电平有效
位 29 DEPOL:数据使能极性
        此位由软件置 1 和清零。
        0:数据使能极性低电平有效
        1:数据使能极性高电平有效
位 28 PCPOL:像素时钟极性
        此位由软件置 1 和清零。
        0:输入像素时钟
        1:反相输入像素时钟
位 27:17 保留,必须保持复位值
位 16 DEN:抖动使能
        此位由软件置 1 和清零。
        0:禁止抖动
        1:使能抖动
位 15 保留,必须保持复位值
位 14:12 DRW[2:0]:抖动红色宽度
        这些位返回抖动红色位
位 11 保留,必须保持复位值
位 10:8 DGW[2:0]:抖动绿色宽度
        这些位返回抖动绿色位
位 7 保留,必须保持复位值
位 6:4 DBW[2:0]:抖动蓝色宽度
        这些位返回抖动蓝色位
位 3:1 保留,必须保持复位值
位 0 LTDCEN:LCD-TFT 控制器使能位
        此位由软件置 1 和清零。
        0:禁止 LTDC
        1:使能 LTDC

LTDC 影子重载配置寄存器 (LTDC_SRCR)

此寄存器允许立即或在垂直消隐周期内将影子寄存器的值重载到活动寄存器中。影子寄存器
均为第 1 层和第 2 层寄存器,但 LTDC_L1CLUTWR 和 LTDC_L2CLUTWR 除外。主要用于实现配置的同步更新,确保显示控制器在特定时机(如垂直同步期间)安全切换配置,避免显示异常(如撕裂、闪烁等)

影子寄存器的机制:直接修改LTDC的配置寄存器(如层颜色格式、显存地址等)可能导致显示异常,因为修改可能发生在帧刷新过程中,影子寄存器作为“缓冲”,允许用户预先修改配置,但不会立即生效,而是通过重载操作在安全时机(如垂直消隐期间)同步到实际寄存器中

重载触发条件:

        立即重载:通过设置 IMR 位,立即强制重载所有影子寄存器(需谨慎使用,可能破坏当前帧)。
        垂直空白期重载:通过设置 VBR 位,在垂直消隐期(VSync)自动重载配置,确保切换无撕裂。

 注意:一些配置寄存器执行影子操作。对活动寄存器执行写操作时,或在 LTDC_SRCR 寄存器配
置阶段之后的垂直消隐周期开始时,可将影子寄存器值立即重载到活动寄存器中。如果选择了立即重载配置,则只应在所有新寄存器完成写操作后激活重载。
不应在重载完成前再次修改影子寄存器。读取影子寄存器将返回实际有效值。新写入的值只
能在重载发生后读取。
如果在 LTDC_IER 寄存器中相应使能,则可产生寄存器重载中断。

位 1 VBR:垂直消隐重载 (Vertical Blanking Reload)
        此位由软件置 1,只有重载后才由硬件清零。(一旦置 1,便无法通过寄存器写操作清零)
        0:无影响
        1:影子寄存器在垂直消隐周期(有效显示区后的第一行开始时)内重载
位 0 IMR:立即重载 (Immediate Reload)
        此位由软件置 1,只有重载后才由硬件清零。
        0:无影响
        1:影子寄存器立即重载

LTDC 背景色配置寄存器 (LTDC_BCCR)

此寄存器定义背景色 (RGB888)

位 31:24 保留,必须保持复位值

位 23:16 BCRED[7:0]:背景红色值,这些位配置背景红色值

位 15:8 BCGREEN[7:0]:背景绿色值,这些位配置背景绿色值

位 7:0 BCBLUE[7:0]:背景蓝色值,这些位配置背景蓝色值

LTDC 中断使能寄存器 (LTDC_IER)

此寄存器通过将对应的位置 1 来确定哪一个状态标志位产生中断请求

位 31:4 保留,必须保持复位值
位 3 RRIE:寄存器重载中断使能 (Register Reload interrupt enable)
        此位由软件置 1 和清零
        0:禁止寄存器重载中断
        1:使能寄存器重载中断
位 2 TERRIE:传输错误中断使能 (Transfer Error Interrupt Enable)
        此位由软件置 1 和清零
        0:禁止传输错误中断
        1:使能传输错误中断
位 1 FUIE:FIFO 下溢中断使能 (FIFO Underrun Interrupt Enable) 
        此位由软件置 1 和清零
        0:禁止 FIFO 下溢中断
        1:使能 FIFO 下溢中断
位 0 LIE:行中断使能 (Line Interrupt Enable)
        此位由软件置 1 和清零
        0:禁止行中断
        1:使能行中断

LTDC 中断状态寄存器 (LTDC_ISR)

位 31:24 保留,必须保持复位值
位 3 RRIF:寄存器重载中断标志 (Register Reload Interrupt Flag)
        0:未产生寄存器重载中断
        1:发生垂直消隐重载时(以及到达有效区域后的第一行时)产生寄存器重载中断
位 2 TERRIF:传输错误中断标志 (Transfer Error interrupt flag)
        0:未产生传输错误中断
        1:出现总线错误时产生传输错误中断
位 1 FUIF:FIFO 下溢中断标志 (FIFO Underrun Interrupt flag) 
        0:未产生 FIFO 下溢中断
        1:当其中一个层 FIFO 为空并从 FIFO 读取像素数据时,将产生 FIFO 下溢中断
位 0 LIF:行中断标志 (Line Interrupt flag)
        0:未产生行中断
        1:到达编程的行时产生行中断

LTDC 中断清零寄存器 (LTDC_ICR)

位 31:24 保留,必须保持复位值
位 3 CRRIF:寄存器重载中断清零标志 (Clears Register Reload Interrupt Flag) 
        0:无影响
        1:将 LTDC_ISR 寄存器中的 RRIF 标志清零
位 2 CTERRIF:传输错误中断清零标志 (Clears the Transfer Error Interrupt Flag) 
        0:无影响
        1:将 LTDC_ISR 寄存器中的 TERRIF 标志清零
位 1 CFUIF:FIFO 下溢中断清零标志 (Clears the FIFO Underrun Interrupt flag) 
        0:无影响
        1:将 LTDC_ISR 寄存器中的 FUDERRIF 标志清零
位 0 CLIF:行中断清零标志 (Clears the Line Interrupt Flag) 
        0:无影响
        1:将 LTDC_ISR 寄存器中的 LIF 标志清零

LTDC 行中断位置配置寄存器 (LTDC_LIPCR)

此寄存器定义行中断的位置。要编程的行值取决于时序参数

位 31:11 保留,必须保持复位值
位 10:0 LIPOS[10:0]:行中断位置 (Line Interrupt Position)
        这些位配置行中断位置

LTDC 当前位置状态寄存器 (LTDC_CPSR)

位 31:16: CXPOS[15:0]:当前 X 位置 (Current X Position) 
        这些位返回当前 X 位置
位 15:0 CYPOS[15:0]:当前 Y 位置 (Current Y Position) 
        这些位返回当前 Y 位置

LTDC 当前显示状态寄存器 (LTDC_CDSR)

此寄存器返回由 HSYNC、VSYNC 和水平/垂直 DE 信号控制的当前显示阶段的状态。
示例:如果当前显示阶段为垂直同步阶段,则 VSYNCS 位置 1(高电平有效)。示例:如
果当前显示阶段为水平同步阶段,则 HSYNCS 位高电平有效。返回的状态不取决于 LTDC_GCR 寄存器中配置的极性,而是返回当前的有效显示阶段

位 31:24 保留,必须保持复位值
位 3 HSYNCS:水平同步显示状态
        0:低电平有效
        1:高电平有效
位 2 VSYNCS:垂直同步显示状态
        0:低电平有效
        1:高电平有效
位 1 HDES:水平数据使能显示状态
        0:低电平有效
        1:高电平有效
位 0 VDES:垂直数据使能显示状态
        0:低电平有效
        1:高电平有效

LTDC 第 x 层控制寄存器 (LTDC_LxCR)

偏移地址:0x84 + 0x80 x (第 x 层 - 1),x = 1 或 2

位 31:5 保留,必须保持复位值
位 4 CLUTEN:查色表使能 (Color Look-Up Table Enable)
        此位由软件置 1 和清零。
        0:禁止查色表
        1:使能查色表
        CLUT 仅对 L8、AL44 和 AL88 像素格式有意义。请参见第 479 页上的查色表 (CLUT)。
位 3 保留,必须保持复位值
位 2 保留,必须保持复位值
位 1 COLKEN:色键使能 (Color Keying Enable)
        此位由软件置 1 和清零。
        0:禁止色键
        1:使能色键
位 0 LEN:层使能 (Layer Enable)
        此位由软件置 1 和清零。
        0:禁止层
        1:使能层

LTDC 第 x 层窗口水平位置配置寄存器 (LTDC_LxWHPCR)(其中 x=1..2)

此寄存器定义第 1 层或第 2 层窗口的水平位置(第一个和最后一个像素)。
一行的第一个可见像素是在 LTDC_BPCR 寄存器中编程的 AHBP[10:0] bits + 1 的值。
一行的最后一个可见像素是在 LTDC_AWCR 寄存器中编程的 AAW[10:0] bits 的值。此范围
内的所有值均为允许值。
偏移地址:0x88 + 0x80 x (第 x 层 - 1),x = 1 或 2

位 31:28 保留,必须保持复位值
位 27:16 WHSPPOS[11:0]:窗口水平结束位置 (Window Horizontal Stop Position)
        这些位配置层窗口的一行的最后一个可见像素。
位 15:12 保留,必须保持复位值
位 11:0 WHSTPOS[11:0]:窗口水平起始位置 (Window Horizontal Start Position)
        这些位配置层窗口的一行的第一个可见像素。

LTDC_BPCR 寄存器配置为 0x000E0005(AHBP[11:0] 为 0xE),LTDC_AWCR 寄存器配
置为 0x028E01E5(AAW[11:0] 为 0x28E)。要配置大小为 630x460 的窗口的水平位置(有
效数据区域中的水平起始偏移为 5 个像素)。
1. 层窗口的第一个像素:WHSTPOS[11:0] 应编程为 0x14 (0xE+1+0x5)
2. 层窗口的最后一个像素:WHSPPOS[11:0] 应编程为 0x28A

LTDC 第 x 层窗口垂直位置配置寄存器 (LTDC_LxWVPCR)(其中 x=1..2)

此寄存器定义第 1 层或第 2 层窗口的垂直位置(第一行或最后一行)。
一个帧的第一个可见行是在 LTDC_BPCR 寄存器中编程的 AVBP[10:0] bits + 1 的值。
一个帧的最后一个可见行是在 LTDC_AWCR 寄存器中编程的 AAH[10:0] bits 的值。此范围
内的所有值均为允许值。

位 31:27 保留,必须保持复位值
位 26:16 WVSPPOS[10:0]:窗口垂直结束位置
        这些位配置层窗口的最后一个可见行。
位 15:11 保留,必须保持复位值
位 10:0 WVSTPOS[10:0]:窗口垂直起始位置
        这些位配置层窗口的第一个可见行。

LTDC_BPCR 寄存器配置为 0x000E0005(AVBP[10:0] 为 0x5),LTDC_AWCR 寄存器配
置为 0x028E01E5(AAH[10:0] 为 0x1E5)。要配置大小为 630x460 的窗口的垂直位置(有
效数据区域中的垂直起始偏移为 8 行):
1. 层窗口的第一行:WVSTPOS[10:0] 应编程为 0xE (0x5 + 1 + 0x8)
2. 层窗口的最后一行:WVSPPOS[10:0] 应编程为 0x1DA

LTDC 第 x 层色键配置寄存器 (LTDC_LxCKCR)(其中 x=1..2)

此寄存器定义色键使用的色键值 (RGB)

位 31:24 保留,必须保持复位值
位 23:16 CKRED[7:0]:色键红色值
位 15:8 CKGREEN[7:0]:色键绿色值
位 7:0 CKBLUE[7:0]:色键蓝色值

LTDC 第 x 层像素格式配置寄存器 (LTDC_LxPFCR)(其中 x=1..2)

此寄存器定义层的帧缓冲区中存储的数据所使用的像素格式。像素数据从帧缓冲区读取,随
后转换为内部格式 8888 (ARGB)。

位 31:3 保留,必须保持复位值
位 2:0 PF[2:0]:像素格式 (Pixel Format) 
        这些位配置像素格式
        000:ARGB8888
        001:RGB888
        010:RGB565
        011:ARGB1555
        100:ARGB4444
        101:L8(8 位 Luminance)
        110:AL44(4 位 Alpha,4 位 Luminance)
        111:AL88(8 位 Alpha,8 位 Luminance)

LTDC 第 x 层常数 Alpha 配置寄存器 (LTDC_LxCACR)(其中 x=1..2)

此寄存器定义在 alpha 混合中使用的常数 alpha 值(由硬件实现 255 等分)。请参LTDC_LxBFCR 寄存器。

位 31:8 保留,必须保持复位值
位 7:0 CONSTA[7:0]:常数 Alpha (Constant Alpha)
        这些位配置混合时使用的常数 Alpha。常数 Alpha 由硬件实现 255 等分。
        示例:如果编程的常数 Alpha 为 0xFF,则常数 Alpha 值为 255/255=1

LTDC 第 x 层默认颜色配置寄存器 (LTDC_LxDCCR)(其中 x=1..2)

此寄存器定义采用 ARGB 格式的层的默认颜色。默认颜色在定义的层窗口外使用或在层禁止 时使用。复位值 0x00000000 定义了透明黑色。

位 31:24 DCALPHA[7:0]:默认 Alpha 值 (Default Color Alpha)
        这些位配置默认 alpha 值
位 23:16 DCRED[7:0]:默认颜色红色 (Default Color Red)
        这些位配置默认红色值
位 15:8 DCGREEN[7:0]:默认颜色绿色 (Default Color Green)
        这些位配置默认绿色值
位 7:0 DCBLUE[7:0]:默认颜色蓝色 (Default Color Blue) 
        这些位配置默认蓝色值

LTDC 第 x 层混合系数配置寄存器 (LTDC_LxBFCR)(其中 x=1..2)

此寄存器定义混合系数 F1 和 F2。
通用混合公式为:BC = BF1 x C + BF2 x Cs
BC = 混合后的颜色
BF1 = 混合系数 1
C = 当前层颜色
BF2 = 混合系数 2
Cs = 底层混合后的颜色

位 31:11 保留,必须保持复位值
位 10:8 BF1[2:0]:混合系数 1 (Blending Factor 1)
这些位选择混合系数 F1
000:保留
001:保留
010:保留
011:保留
100:常数 Alpha
101:保留
110:像素 Alpha x 常数 Alpha
111:保留
位 7:3 保留,必须保持复位值
位 2:0 BF2[2:0]:混合系数 2 (Blending Factor 2) 
这些位选择混合系数 F2
000:保留
001:保留
010:保留
011:保留
100:保留
101:1——常数 Alpha
110:保留
111:1——(像素 Alpha x 常数 Alpha)

LTDC 第 x 层颜色帧缓冲区地址寄存器 (LTDC_LxCFBAR)(其中 x=1..2)

此寄存器定义颜色帧缓冲区的起始地址,该地址必须指向帧缓冲区中存储的层的左上角像素
的像素数据地址。

位 31:0 CFBADD[31:0]:颜色帧缓冲区起始地址
        这些位定义颜色帧缓冲区的起始地址。

LTDC 第 x 层颜色帧缓冲区长度寄存器 (LTDC_LxCFBLR)(其中 x=1..2)

此寄存器定义颜色帧缓冲区的行长和行间距。

位 31:29 保留,必须保持复位值
位 28:16 CFBP[17:0]:颜色帧缓冲区间距(以字节为单位)(Color Frame Buffer Pitch in bytes) 
        这些位定义从像素某行的起始处到下一行的起始处的增量(以字节为单位)。
位 15:13 保留,必须保持复位值
位 12:0 CFBLL[12:0]:颜色帧缓冲区行长 (Color Frame Buffer Line Length)
        这些位定义一行像素的长度(以字节为单位)+ 3。
        行长的计算方法为:有效宽度 x 每像素的字节数 + 3。

示例:
采用 RGB565(每像素 2 个字节)格式且宽度为 256 像素的帧缓冲区(每行总字节数为 256x2=512)需要向此寄存器写入值 0x02000203(其中,间距 = 行长)。
采用 RGB888(每像素 3 个字节)格式且宽度为 320 像素的帧缓冲区(每行总字节数为 320x3=960)需要向此寄存器写入值 0x03C003C3(其中,间距 = 行长)。

LTDC 第 x 层颜色帧缓冲区行数寄存器 (LTDC_LxCFBLNR)(其中 x=1..2)

此寄存器定义颜色帧缓冲区中的行数。

位 31:11 保留,必须保持复位值
位 10:0 CFBLNBR[10:0]:帧缓冲区行数 (Frame Buffer Line Number) 
        这些位用来定义缓冲区中的行数,行数跟有效高度对应。

行数和行长设置定义针对每层从每个帧中获取的数据量。如果配置为低于所需字节,则会产
生 FIFO 下溢中断(如果使能)。
另一方面,起始地址和间距设置定义存储器中每行的正确起始位置。

LTDC 第 x 层 CLUT 写寄存器 (LTDC_LxCLUTWR) (其中 x=1..2)

此寄存器定义 CLUT 地址和 RGB 值

位 31:24 CLUTADD[7:0]:CLUT 地址 (CLUT Address)
这些位配置每个 RGB 值的 CLUT 地址(CLUT 内的颜色位置)
位 23:16 RED[7:0]:红色值 (Red value)
这些位配置红色值
位 15:8 GREEN[7:0]:绿色值 (Green value)
这些位配置绿色值
位 7:0 BLUE[7:0]:蓝色值 (Blue value)
这些位配置蓝色值

CLUT 写寄存器只应在消隐周期内或在层禁止时配置。CLUT 可通过 LTDC_LxCR 寄存器使
能和禁止。
CLUT 仅对 L8、AL44 和 AL88 像素格式有意义。

设置窗口显示区域的大小

LTDC 的层支持窗口设置功能,通过 LTDC_LxWHPCR 和 LTDC_LxWVPCR 这两个寄存
器设置,可以调整显示区域的大小

像素输入格式

可编程像素格式用于层的帧缓冲区中存储的数据。
可通过 LTDC_LxPFCR 寄存器为每个层配置多达 8 个输入像素格式。
像素数据从帧缓冲区中读取,随后按照以下方式转换为内部 8888 (ARGB) 格式:

宽度低于 8 位的分量通过位重复扩展到 8 位。所选位范围多次拼接,直至其超过 8 位。 在得到的向量中,选择高 8 位。例如:5 位 RGB565 红色通道将变为(位位置): 43210432(低 3 位由 5 位中的高 3 位填充)。

查色表(CLUT)

可在运行时通过 LTDC_LxCR 寄存器为每个层使能 CLUT,CLUT 仅在使用 L8、AL44 和AL88 输入像素格式时适用于索引色。
首先,CLUT 必须加载用于替换相应像素(索引色)的原始 R、G 和 B 值的 R、G 和 B 值。
每个颜色(RGB 值)在 CLUT 内都有自己对应的地址。
R、G 和 B 值及其各自的地址均通过 LTDC_LxCLUTWR 寄存器编程。
在使用 L8 和 AL88 输入像素格式时,CLUT 必须加载 256 个颜色。各颜色的地址在LTDC_LxCLUTWR 寄存器的 CLUTADD 位中配置。
在使用 AL44 输入像素格式时,CLUT 必须仅加载 16 个颜色。各颜色的地址必须通过将 
4 位 L 通道重复为 8 位进行填充,具体如下:
– L0(索引色 0),地址 0x00 处
– L1,地址 0x11 处
– L2,地址 0x22 处
– .....
– L15,地址 0xFF 处

颜色帧缓冲区地址

每个层的颜色帧缓冲区均有一个起始地址,该地址通过 LTDC_LxCFBAR 寄存器进行配置。
当使能某个层时,将从颜色帧缓冲区中获取该数据。

颜色帧缓冲区长度
每层均设置颜色帧缓冲区的总行长(单位为字节)和行数,二者可分别通过 LTDC_LxCFBLR 
和 LTDC_LxCFBLNR 寄存器进行配置。
行长和行数的设置用于阻止超出帧缓存结尾的数据被预取到层对应的 FIFO 中。
如果设置为低于所需字节,则会产生 FIFO 下溢中断(如果之前已使能)。
如果设置为高于实际所需字节,则将丢弃从 FIFO 中读取的无用数据。无用数据不会显示。

颜色帧缓冲区间距
每层的颜色帧缓冲区均具有可配置间距,此间距是一行的开始与下一行开始的距离(以字节
为单位)。它通过 LTDC_LxCFBLR 寄存器配置。

默认颜色
每层可具有 ARGB 格式的默认颜色,该颜色在定义的层窗口外使用或在层禁止时使用。
默认颜色通过 LTDC_LxDCCR 寄存器配置。
始终在两层间执行混合操作,即便其中一层禁止也是如此。要避免层禁止时显示默认颜色,
需将 LTDC_LxBFCR 寄存器中此层的混合系数设置为其复位值。

色键
色键 (RGB) 可配置为代表透明像素。
使能色键后,当前像素(格式转换后、CLUT 分别混合前的像素)将与色键进行比较。如果 
当前像素与编程的 RGB 值相匹配,则该像素的所有通道 (ARGB) 均设置为 0。
运行时,可配置色键值并用其替换像素 RGB 值。
色键通过 LTDC_LxCKCR 寄存器配置。
色键通过 LTDC_LxCKCR 寄存器配置。编程值取决于像素格式,因为它会在像素格式转换 
为 ARGB888 后与当前像素进行比较。
示例:如果将中黄色(50% 红 + 50% 绿)用作透明色键,则:
在 RGB565 中,中黄色为 0x8400。将 LTDC_LxCKCR 设为 0x848200。
在 ARGB8888 中,中黄色为 0x808000,将 LTDC_LxCKCR 设为 0x808000。
在所有基于 CLUT 的颜色模式(L8、AL88、AL44)下,将其中一个调色板条目设为中 
黄色 0x808000,将 LTDC_LxCKCR 设为 0x808000。

LTDC的时钟配置

代码后面更新

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值