文章目录
- 基础知识简介
-
- RGBLCD
- LTDC
-
- 1.信号线
- 2.图像处理单元
- 3.AHB 接口
- 4.LTDC相关寄存器及使用方法
-
- LTCD全局控制寄存器 LTCD_GCR
- LTCD同步大小寄存器 LTDC_SSCR
- LTDC有效宽度配置寄存器 LTDC_AWCR
- LTDC 总宽度配置寄存器 LTDC_TWCR
- LTDC 背景色配置寄存器 LTDC_BCCR
- LTDC当前位置状态寄存器 LTDC_CPSR
- LTDC当前显示状态寄存器 LTDC_CDSR
- LTDC 的层颜色帧缓冲区地址寄存器 LTDC_LxCFBAR(x=1/2)
- LTDC 的层像素格式配置寄存器 LTDC_LxPFCR(x=1/2)
- LTDC 的层恒定 Alpha 配置寄存器 LTDC_LxCACR(x=1/2)
- LTDC 的层默认颜色配置寄存器 LTDC_LxDCCR(x=1/2)
- LTDC 层混合系数配置寄存器:LTDC_LxBFCR(x=1/2)
- LTDC 的层窗口水平位置配置寄存器 LTDC_LxWHPCR(x=1/2)
- LTDC 的层窗口垂直位置配置寄存器 LTDC_LxWVPCR(x=1/2)
- LTDC 的层颜色帧缓冲区长度寄存器 LTDC_LxCFBLR(x=1/2)
- LTDC 的层颜色帧缓冲区行数寄存器 LTDC_LxCFBLNR(x=1/2)
- 5.时钟域
- DMA2D
- LTDC具体使用步骤
- 使用DMA2D完成颜色填充
基础知识简介
RGBLCD
1.RGBLCD的信号
一般的 RGB 屏有 24 根颜色数据线(RGB 各站 8 根,即RGB888 格式),这样可以表示最多 1600W 色,DE、VS、HS 和 DCLK,用于控制数据传输。
2.RGBLCD驱动模式
其驱动模式主要分为两种
- DE模式
DE 模式使用 DE 信号来确定有效数据,DE 为高/低时,数据有效 - HV模式
HV模式需要行同步和列同步,来表示扫描的行和列
LTDC
STM32F767xx 系列芯片都带有 TFT LCD 控制器,即 LTDC,通过这个 LTDC,STM32F767可以直接外接 RGBLCD 屏,实现液晶驱动。
1.信号线
STM32F767 核心板板载的 LCD 接口引出为了,节省 IO,并提高图片显示速度,使用 RGB565 颜色格式,这样只需要 16 个 IO 口,当使用 RGB565 格式的时候,LCD 面板的数据线,必须连接到 LTDC 数据线的 MSB

2.图像处理单元
先从 AHB 接口获取显存中的图像数据,然后经过层 FIFO(有 2 个,对应 2 个层)缓存,每个层 FIFO 具有 64*32 位存储深度,然后经过像素格式转换器(PFC),把从层的所选输入像素格式转换为 ARGB8888 格式,再通过混合单元,把两层数据合并,混合得到单层要显示的数据,最后经过抖动单元处理(可选)后,输出给 LCD 显示。
混合单元首先将第一层与背景层进行混合,随后,第二层与第一层和第二层的混合颜色结果再次混合,完成混合后,送给 LCD显示。

3.AHB 接口
由于 LTDC 驱动 RGBLCD 的时候,需要有很多内存来做显存,比如一个 800480 的屏幕,按一般的 16 位 RGB565 模式,一个像素需要 2 个字节的内存,总共需要:800480*2=768K 字节内存,STM32 内部是没有这么多内存的,所以必须借助外部 SDRAM,而 SDRAM 是挂在AHB 总线上的,LTDC 的 AHB 接口,就是用来将显存数据,从 SDRAM 存储器传输到 FIFO 里面。
4.LTDC相关寄存器及使用方法
LTDC 的各种配置寄存器以及状态寄存器,用于控制整个 LTDC 的工作参数,
主要有:各信号的有效电平、垂直/水平同步时间参数、像素格式、数据使能等等。
如果 RGBLCD 使用的是 DE 模式,需要设置如下参数,然后 LTDC会根据这些设置,自动控制 DE 信号。
LTCD全局控制寄存器 LTCD_GCR

| 名称 | 功能 | 详细解释 | DE下使用 |
|---|---|---|---|
| LTDCEN | TFT LCD 控制器使能位 | LTDC 的开关 | 置1 |
| PCPOL | 像素时钟极性 | 控制像素时钟的极性,根据 LCD 面板的特性来设置,我们所用的 LCD 一般设置为 0 即可,表示低电平有效。 | 0 |
| DEPOL | 数据使能极性 | 控制 DE 信号的极性,根据 LCD 面板的特性来设置,我们所用的 LCD 一般设置为 0 即可,表示低电平有效 | 0 |
| VSPOL | 垂直同步极性 | 控制 VSYNC 信号的极性,根据 LCD 面板的特性来设置,我们所用的 LCD 一般设置为 0 即可,表示低电平有效 | 0 |
| HSPOL | 水平同步极性 | 控制 HSYNC 信号的极性,根据 LCD 面板的特性来设置,我们所用的 LCD 一般设置为 0 即可,表示低电平有效 | 0 |
LTCD同步大小寄存器 LTDC_SSCR
该寄存器用于设置垂直同步高度(VSH)和水平同步宽度(HSW)

| 名称 | 功能 | 详细解释 | DE下使用 |
|---|---|---|---|
| AVBP | 累加垂直后沿 | 以水平扫描行为单位,表示:VSW+VBP-1 | |
| AHBP | 累加水平后沿 | 以像素时钟为单位,表示 HSW+HBP-1 |
LTDC有效宽度配置寄存器 LTDC_AWCR
这里所说的有效高度和有效宽度,是指 LCD 面板的宽度和高度,构成分辨率

| 名称 | 功能 | 详细解释 | DE下使用 |
|---|---|---|---|
| AAH | 累加有效高度 | 以水平扫描行为单位,表示:VSW+VBP+有效高度-1 | |
| AAW | 累加有效高度 | 以像素时钟为单位,表示:HSW+HBP+有效宽度-1 |
LTDC 总宽度配置寄存器 LTDC_TWCR

| 名称 | 功能 | 详细解释 | DE下使用 |
|---|---|---|---|
| TOTALH | 总高度 | 以水平扫描行为单位,表示:VSW+VBP+有效高度+VFP-1 | |
| TOTALW | 总宽度 | 以像素时钟为单位,表示:HSW+HBP+有效宽度+HFP-1 |
LTDC 背景色配置寄存器 LTDC_BCCR
该寄存器定义背景层的颜色(RGB888),通过低 24 位配置,我们一般设置为全 0 即可。

LTDC当前位置状态寄存器 LTDC_CPSR

CXPOS[31~16]:返回当前X坐标位置
CYPOS[15~0]:返回当前Y坐标位置
LTDC当前显示状态寄存器 LTDC_CDSR
此寄存器返回由 HSYNC、VSYNC 和水平/垂直 DE 信号控制的当前显示阶段的状态

- 位 31:24 保留,必须保持复位值
- 位 3 HSYNCS:水平同步显示状态 (Horizontal Synchronization display Status)
0:低电平有效
1:高电平有效 - 位 2 VSYNCS:垂直同步显示状态 (Vertical Synchronization display Status)
0:低电平有效
1:高电平有效 - 位 1 HDES:水平数据使能显示状态 (Horizontal Data Enable display Status)
0:低电平有效
1:高电平有效 - 位 0 VDES:垂直数据使能显示状态 (Vertical Data Enable display Status)
0:低电平有效
1:高电平有效
LTDC 的层颜色帧缓冲区地址寄存器 LTDC_LxCFBAR(x=1/2)
该寄存器用来定义一层显存的起始地址。STM32F767 的 LTDC 支持 2 个层,所以总共有两个寄存器,分别设置层 1 和层 2 的显存起始地址。

LTDC 的层像素格式配置寄存器 LTDC_LxPFCR(x=1/2)
该寄存器只有最低 3 位有效,用于设置层颜色的像素格式,一般使用 RGB565 格式,即该寄存器设置为:010 即可。
| 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 的层恒定 Alpha 配置寄存器 LTDC_LxCACR(x=1/2)
该寄存器低 8 位(CONSTA)有效,这些位配置混合时使用的恒定 Alpha。恒定 Alpha 由硬件实现 255 分频。

LTDC 的层默认颜色配置寄存器 LTDC_LxDCCR(x=1/2)
该寄存器定义采用 ARGB8888 格式的层的默认颜色。默认颜色在定义的层窗口外使用或在层禁止时使用。一般情况下,用不到,所以该寄存器一般设置为 0 即可。

LTDC 层混合系数配置寄存器:LTDC_LxBFCR(x=1/2)
该寄存器用于定义混合系数:BF1 和 BF2。BF1=100 的时候,使用恒定的 Alpha 混合系数(由LTDC_LxCACR寄存器设置恒定Alpha值),BF1=110的时候,使用像素Alpha恒定Alpha。像素 Alpha 即 ARGB 格式像素的 A 值(Alpha 值),仅限 ARGB 颜色格式时使用。在 RGB565格式下,我们设置 BF1=100 即可。BF2 同 BF1 类似,BF2=101 的时候,使用恒定的 Alpha 混合系数,BF2=111 的时候,使用像素 Alpha恒定 Alpha。在 RGB565 格式下,我们设置 BF2=101即可。
通用的混合公式为:BC=BF1C+BF2Cs
其中:BC=混合后的颜色;BF1=混合系数 1;C=当前层颜色,即我们写入层显存的颜色值;BF2=混合系数 2;Cs=底层混合后的颜色,对于层 1 来说,Cs=背景层的颜色,对于层 2 来说,Cs=背景层和层 1 混合后的颜色。

LTDC 的层窗口水平位置配置寄存器 LTDC_LxWHPCR(x=1/2)
该寄存器定义第 1 层或第 2 层窗口的水平位置,第一个和最后一个像素
WHSTPOS:窗口水平起始位置,定义层窗口的一行的第一个可见像素,
WHSPPOS:窗口水平停止位置,定义层窗口的一行的最后一个可见像素
LTDC 的层窗口垂直位置配置寄存器 LTDC_LxWVPCR(x=1/2)
该寄存器定义第 1 层或第 2 层窗口的垂直位置(第一行或最后一行)
WVSTPOS:窗口垂直起始位置,定义层窗口的第一个可见行。
WVSPPOS:窗口垂直停止位置,定义层窗口的最后一个可见行。
LTDC 的层颜色帧缓冲区长度寄存器 LTDC_LxCFBLR(x=1/2)
该寄存器定义颜色帧缓冲区的行长和行间距。

- CFBLL:这些位定义一行像素的长度(以字节为单位)+3。
行长的计算方法为:有效宽度 * 每像素的字节数 + 3。
比如,LCD 面板的分辨率为 800480,有效宽度为 800,采用 RGB565 格式,那么 CFBLL 需要设置为:8002+3=1603。 - CFBP:这些位定义从像素某行的起始处到下一行的起始处的增量(以字节为单位)。
这个设置,其实同样是一行像素的长度,对于 800480 的 LCD 面板,RGB565 格式,设置 CFBP 为:8002=1600 即可。
LTDC 的层颜色帧缓冲区行数寄存器 LTDC_LxCFBLNR(x=1/2)
该寄存器定义颜色帧缓冲区中的行数。
比如,LCD 面板的分辨率为 800*480,那么帧缓冲区的行数为 480 行,则设置 CFBLNBR=480 即可

5.时钟域
LTDC 有三个时钟域:AHB 时钟域(HCLK)、APB2 时钟域(PCLK2)和像素时钟域(LCD_CLK),
AHB 时钟域用于驱动 AHB 接口,读取存储器的数据到 FIFO 里面;
APB2 时钟域用于配置寄存器;
LCD_CLK像素时钟域则用于生成 LCD 接口信号,LCD_CLK 的输出应按照 LCD 面板要求进行配置。
DMA2D
- 为了提高STM32F767的图像处理能力,ST公司设计了一个专用于图像处理的专业 DMA,通过 DMA2D 对图像进行填充和搬运,可以完全不用CPU 干预,从而提高效率,减轻 CPU 负担。
它可以执行下列操作:
- 用特定颜色填充目标图像的一部分或全部(可用于快速单色填充)
- 将源图像的一部分(或全部)复制到目标图像的一部分(或全部)中(可用于快速图
像填充)- 通过像素格式转换将源图像的一部分(或全部)复制到目标图像的一部分(或全部)
中- 将像素格式不同的两个源图像部分和/ 或全部混合,再将结果复制到颜色格式不同的
部分或整个目标图像中
- DMA2D 有四种工作模式,通过 DMA2D_CR 寄存器的 MODE[1:0]位选择工作模式:
1, 寄存器到存储器
2, 存储器到存储器
3, 存储器到存储器并执行 PFC
4, 存储器到存储器并执行 PFC 和混合
- 寄存器到储存器
寄存器到存储器模式用于以预定义颜色填充用户自定义区域,也就是可以实现快速的单色
填充显示,比如清屏操作。
在该模式下:颜色格式在 DMA2D_OPFCCR 中设置,DMA2D 不从任何源获取数据,它只
是将 DMA2D_OCOLR 寄存器中定义的颜色写入通过 DMA2D_OMA 寻址以及 DMA2D_NLR 和
DMA2D_OOR 定义的区域- 储存器到储存器
该模式下,DMA2D 不执行任何图形数据转换。前景层输入 FIFO 充当缓冲区,数据从
DMA2D_FGMAR 中定义的源存储单元传输到 DMA2D_OMAR 寻址的目标存储单元,可用于快
速图像填充。DMA2D_FGPFCCR 寄存器的 CM[3:0]位中编程的颜色模式决定输入和输出的每像
素位数。对于要传输的区域大小,源区域大小由 DMA2D_NLR 和 DMA2D_FGOR 寄存器定义,
目标区域大小则由 DMA2D_NLR 和 DMA2D_OOR 寄存器定义。
- 以上两个工作模式,LTDC 在层帧缓存里面的开窗关系都一样的,经过如下三个寄存器的配置,就可以确定窗口的显示位置和大小。
(1). 窗口显示区域的显存首地址由 DMA2D_OMAR 寄存器指定,
(2).窗口宽度和高度由DMA2D_NRL 寄存器的 PL 和 NL 指定
(3).行偏移(确定下一行的起始地址)由 DMA2D_OOR寄存器指定,

在寄存器到存储器模式下,在开窗完成后,DMA2D 可以将 DMA2D_OCOLR 指定的颜色,
自动填充到开窗区域,完成单色填充。
在存储器到存储器模式下,需要完成两个开窗:前景层和显示层,完成配置后,图像数据从前景层拷贝到显示层(仅限窗口范围内),从而显示到 LCD 上面。显示层的开窗如上图所示,前景层也和上图类似,只是 DMA2D_OMAR 寄存器变成了DMA2D_FGMAR,DMA2D_OOR寄存器变成了DMA2D_FGOR,DMA2D_NRL则两个层共用,然后就可以完成对前景层的开窗,确定好两个窗口后,DMA2D 就将前景层窗口内的数据,拷贝到显示层窗口,完成快速图像填充。
DMA2D相关寄存器
DMA2D控制寄存器 DMA2D_CR
该寄存器,主要是MODE 和 START 这两个设置

MODE:表示 DMA2D 的工作模式,
00:存储器到存储器模式;01:存储器到存储器模式并执行 PFC;
10:存储器到存储器并执行混合;11,寄存器到存储器模式;
START:该位控制 DMA2D 的启动,在配置完成后,设置该位为 1,启动 DMA2D 传输。
DMA2D输出 PFC 控制寄存器 DMA2D_OPFCCR
该寄存器用于设置寄存器到存储器模式下的颜色格式
只有最低 3 位有效(CM[2:0]),表示的颜色格式有:
000,ARGB8888;001:RGB888;010:RGB565;
011:ARGB1555;100:ARGB1444。
我们一般使用的是 RGB565 格式,所以设置 CM[2:0]=010 即可。
DMA2D前景层 PFC 控制寄存器:DMA2D_FGPFCCR

该寄存器,低 4 位:CM[3:0],用于设置存储器到存储器模式下的颜色格式

本文详细介绍了STM32F767如何利用LTDC驱动RGBLCD,包括RGBLCD的信号、驱动模式、LTDC的信号线、图像处理单元、AHB接口、寄存器配置、时钟域以及DMA2D的使用。LTDC通过配置寄存器控制LCD接口信号,而DMA2D则用于高效填充和搬运图像数据,减轻CPU负担。文章还提供了具体的配置步骤和示例代码,帮助读者理解并实现STM32F767驱动RGBLCD的过程。

9583

被折叠的 条评论
为什么被折叠?



