一、LTDC简介
LCD-TFT(液晶显示器 —— 薄膜晶体管)显示器控制器提供并行数字 RGB(红色、绿色、蓝色)以及水平同步、垂直同步、像素时钟和数据使能信号,这些信号直接输出到不同 LCD和 TFT 面板的接口。本章通过Open746I-C开发板 控制微雪7inch Capaciti ve Touch LCD (F)型LCD。其原理图如下: (注:本章介绍的是通过LDTC控制RGB接口的屏幕,即屏幕是不带控制器的,与带控制芯片的8080系列接口的屏幕不同)
0
LTDC框图如下,最高24条RGB数据线(RGB888), 两个可以显示图层,可以进行图像层叠加处理。
RGB时序图如下,RGB接口的屏幕是通过MCU不断发送显示数据到屏幕,逐行扫描显示。
VSYNC: 帧同步信号,表示扫描1帧的开始,一帧也就是LCD显示的一个画面。
HSYNC: 行同步信号,表示扫描1行的开始。
VDEN :数据使能信号。
提交评论
MCU会用一部分内存来存储显示的数据,即显存,LDTC控制器不断将显存内的数据发送到屏幕扫描显示。屏幕是通过MCU扫描显示的,要改变显示的图片,只需要改变显存的数据即可。而显存的数据存储的格式和图像的格式有关,例如ARGB8888,RGB888,RGB565等,其中A为透明度,R表示红色,G表示绿色,B表示蓝色。例如RGB565格式的图形,一个像素点只需两个字节存储。ARGB8888一个像素点要四个字节存储。
提交评论
二、DMA2D简介
Chrom-Art Accelerator™ (DMA2D) 是专用于图像处理的专业 DMA。由前面介绍可知,显示的图形是通过一定格式存储在内存中,要改变显示的内容,只需将新的数据存储在对应的显存中即可,可以通过DMA传输数据。DMA2D和普通的DMA通道不一样是,它是专用于图像处理的专用DMA,他可以执行下列操作。
用特定颜色填充目标图像的一部分或全部 将源图像的一部分(或全部)复制到目标图像的一部分(或全部)中 通过像素格式转换将源图像的一部分或全部复制到目标图像的一部分或全部中 将像素格式不同的两个源图像部分和 / 或全部混合,再将结果复制到颜色格式不同的部分或整个目标图像中。
提交评论
三、显示图片实验。
实验中用SDRAM作为屏幕的显存, 复制上一章SDRAM的工程,修改文件夹名。击 STM32F746I.ioc 打开 STM32cubeMX的工程文件重新配置,LTDC接口类型选择RGB888(24 bits)。启动DMA2D。
提交评论
配置引脚如下, 其中PA3是PWM的背光,这里简单的做为GPIO_OUT进行初始化,设置用户标签为BL。 注意:由于CubeMX会默认帮你选择好相关的引脚,但有时和你实际的硬件有冲突(它认为它是最优的,但有时会觉得这功能很烦),这时需要强制配置某些引脚的功能(比较花时间的一步,需要对着原理图仔细检查是否有错误)
提交评论
配置 [size=13.6364px]时钟,系统时钟为216MHz,LCD-TFT为32MHz,如果LCD时钟过高会刷新不过来出现花屏,如果频率过低显示的图像会出现闪烁。
提交评论
DMA2D主要配置Color Mode 和 DMA2D Input Color Mode。Color Mode为显存的存储格式,此处为RGB565。DMA2D Input Color Mode为源图像的格式,此处配置为RGB565。如果要显示的图形为RGB888格式,则设置为RGB888,DMA2D会转为显存的格式(此处为RGB565)再存储到显存中。
提交评论
LTDC参数设置,实验LCD分辨率是1024X600, 所以Active Width和Active Height 分别为1024和600。
关于Synchronization for Width和Synchronizaion for Height里剩余的6个参数为SYNC的时序值,需要按你的LCD数据手册进行调整。实际很多LCD供应商都没有提供像样数据手册,但没数据手册也没关系,
如果你使用下面的数据,发现显示不是全屏,其实只要在下面参数的基础上进行微调就可以了。多改几次参数,看一下现像就懂了,不多解释。 使用下面的参数,显示效果基本都在可接受的范围内。
提交评论
简单科普一下:
一般的LCD都有DE和SYNC模式。如果使用的是DE模式(一般LCD模块默认是DE模式),对下面SYNC的参数就没有具体要求(想怎么填就怎么填), 如果使用SYNC模式,那就乖乖的调吧。
可能有人会问,怎么知道自己的LCD模块是什么模式,以上面的LCD的数据手册结合原理图 可知:
R22 = NC ,R23 = 10K时为SYNC模式
R22 = 10K,R23 = NC 时为DE模式
(不要问我怎么有数据手册的,地上捡的!)
提交评论
好像讲的太远了,回来回来。。。。 图层配置如下:
提交评论
下面详细说明,各个选项的配置:
Windows Position栏设置显示窗口的位置大小,此处设置图层1,图层2大小为512x300,(0,0)位置开始。显存显示显示格式为RGB565。
Alpha constant for blending相当于设置层的透明度,0xff表示透明度为100%,0x00表示透明度为0(不显示)。其中layer0为底层,layer1为顶层,顶层如果有显示,就会遮盖底层,即如果把顶层的透明度设置为0xff,那就可以100%遮盖底层,此处设置为0x7F,两个图层叠加显示。(有用过photoshop之类的软件,应该比较容易理解层的概念)
提交评论
其它实际也没什么好说的,注意一下分配显存的地址空间,此处使用SDRAM作为显存,由上一章可知Open746I-C开发板SDRAM接到区域2,起始地址为0xD000 0000。由于有两个层,注意内存地址间要有一定的间距。
BackGroun Color为背景颜色,此处为默认黑色。
注意 :LDTC输出管脚设置GPIO Settings需要把所有LCD管脚的最大输出速度(Maximum output speed)设置为高速(High), 否则会导致LCD刷新不过来等问题。
提交评论
在CORTEX_M7 Configuration中,把CPU ICache和CPU DCache使能,其它保持默认。使用ICache和DCache可以大幅度提高程序的运行速度。
提交评论