STM32Cube配置LTDC驱动RGB LCD

使用正点原子北极星STM32H750开发板驱动正点原子4.3寸RGB LCD。

一、LTDC介绍

LTDC属于DPI(display pixel interface,显示像素接口,也称RGB接口),可用于MCU驱动TFT屏幕。同时一般都会配备DMA2D用于图形加速显示。

STM32H750 最大支持RGB888(1600W 色),信号线如下图:

RGB888可向下兼容RGB666和RGB565。

RGB 屏一般有 2 种驱动模式:DE 模式和 HV 模式。DE 模式使用 DE 信号来确定有效数据 (DE 为高/低时,数据有效),而 HV 模式,则需要行同步和场同步,来表示扫描的行和列。

二、STM32 LTDC说明

STM32H750 的 LTDC 具有如下特点:

⚫ 24 位 RGB 并行像素输出;每像素 8 位数据(RGB888)

⚫ 2 个带有专用 FIFO 的显示层(FIFO 深度 64x32 位)

⚫ 支持查色表 (CLUT),每层高达 256 种颜色(256x24 位)

⚫ 可针对不同显示面板编程时序

⚫ 可编程背景色

⚫ 可编程 HSync、VSync 和数据使能(DE)信号的极性

⚫ 每层有多达 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 个可编程中断事件

说明:

ARGB8888(4B):在RGB888的基础上增加了8位A值(Alpha),0x00表示完全透明、0xFF表示不透明;

ARGB1555(2B):在RGB565的基础上砍掉一位,用作A值,0表示完全透明、1表示不透明;

STM32H750 的 LTDC 总共有三个层:背景层、第一层和第二层,其中,背景层只可以是 纯色(即单色),而第一层和第二层都可以用来显示信息,两层各有一个FIFO,需要开辟两个显存缓冲区来存放第一层和第二层要显示的内容,LTDC将缓冲区数据取到FIFO中,混合单元会将三个层混合起来,进行 显示,显示关系如下图:

从图中可以看出,第二层位于最顶端,背景层位于最低端,混合单元首先将第一层与背景 层进行混合,随后,第二层与第一层和第二层的混合颜色结果再次混合,完成混合后,送给 LCD 显示。

STM32 LTDC留有AXI接口,用于链接外部SDRAM,快速读取和存放显存数据。显存计算:如果使用4.3寸800*480的LCD,以RGB565(16位)为例,一个像素点16bit(2字节),单层的显存缓冲区就有800*480*2 = 768000 Byte = 750 KB;以RGB888(24位)为例,一个像素点24bit(3字节),而单片机内没有24bit定义,只能使用32bit(4个字节),单层的显存缓冲区就有800*480*4 = 1536000 Byte = 1500 KB

三、LTDC关键时序参数

以上参数中,HSW也会被称为HPW,VSW也会被称为VPW,具体看LCD对应的手册描述。

本文使用正点原子的4.3寸RGB屏幕,其正确的LTDC 工作参数如下:

由上图可知,该屏幕的时钟最大工作频率在50MHz,常规使用30MHz,LCD刷新率 = LTDC时钟工作频率 / ((HSW + HBP +HFP -1) * (VSW + VBP +VFP -1)) ,30Mhz接近60Hz的刷新率。

HSW(HPW) = 48 pixels

HBP = 88 pixels

HFP = 40 pixels

VSW(VPW) = 3 lines

VBP = 32 lines

VFP = 13 lines

Active Width = 800 pixels

Active Height = 480 lines

四、代码范例

1、硬件环境:正点原子北极星STM32H750开发板、正点原子4.3寸RGB LCD

2、硬件连接图:

3、工程配置

本工程使用LTDC + SDRAM + DMA2D外设。(SDRAM的使用查看SDRAM驱动代码)

PB5为LCD背光引脚,一定要配置并在代码中打开,不然LCD一直都是黑的!!!

注意修改LTDC的引脚翻转速度为Very High。

其中LTDC的工作参数上文所述,填入即可。同时此处如果需要特定的背景颜色,则需要对Red、Green、Blue参数进行修改(范围0-255),例如设置Red = 255,那么上电LTDC运行成功之后,屏幕会呈现红色。

接下来对层进行设置,当前只设置了一层,显示范围为(0,0)到(800,480),颜色为RGB565,第一层和背景混合透明度为255(不透明),同时以固定的透明度进行混合,第一层的默认颜色透明度为0(基本没用,会受到混合透明度的影响),第一层的RGB默认颜色为纯蓝色,显存首地址为0xC0000000(因为外设接口SDRAM 1的映射地址为0xC0000000),显存空间为800 * 480像素(此处单位为像素,实际大小查看上文的计算方式)。

不开LTDC中断。

DMA2D推荐使用正点原子使用寄存器的写法,因为LTDC同时存在Memory to Memory(内存到内存)和Register to Memory(寄存器到内存)两种新形式。所以只要打开DMA2D即可。

需要特别注意的是,这里必须要配置DMA2D中断,否则在使用DMA2D传输数据是会一直等待传输完成。

时钟配置如图。

配置完成后,点击生成即可。

4、代码添加

SDRAM需要添加初始化代码。(SDRAM的使用查看SDRAM驱动代码)

在main.c文件中,MX_LTDC_Init();函数之后添加:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5,GPIO_PIN_SET); //打开背光

只要SDRAM驱动成功后,点击下载,LCD呈现蓝色就表示LTDC驱动成功了。(蓝色是由上面的第一层默认颜色配置得到的,通过修改这里可以获得不同的显示颜色)。

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值