一、了解显示器

常见的显示器有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。

(1)液晶显示器LCD(Liquid Crystal Display)

LCD 显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。

液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态, 但是它的分子排列却和固体晶体一样非常规则,因此取名液晶。如果给液晶施加电场,会改变它的分子排列,从而改变光线的传播方向,配合偏振光片,它就具有控制光线透过率 的作用,再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少。利用这种原理,做出可控红、绿、蓝光输出强度的显示结构,把三种显示结构组成一个显示单位,通过控制红绿蓝的强度,可以使该单位混合输出不同的色彩,这样的一个显示单位被称为像素

注意液晶本身是不发光的,所以需要有一个背光灯提供光源,光线经过一系列处理过程才到输出,所以输出的光线强度是要比光源的强度低很多的,比较浪费能源(当然,比CRT显示器还是节能多了)。而且这些处理过程会导致显示方向比较窄,也就是它的视角较小,从侧面看屏幕会看不清它的显示内容。另外,输出的色彩变换时,液晶分子转动也需要消耗一定的时间,导致屏幕的响应速度低

(2)CRT显示器(阴极射线管显示器)

就是小时候常见的长头的电视机,比较笨重。

(3)LED显示器(大多数用在户外)

LED点阵彩色显示器的单个像素点内包含红绿蓝三色LED灯,显示原理类似实验板上的LED彩灯,通过控制红绿蓝颜色的强度进行混色,实现全彩颜色输出,多个像素点构成一个屏幕。由于每个像素点都是LED灯自发光的,所以在户外白天也显示得非常清晰,但由于LED灯体积较大,导致屏幕的像素密度低,所以它一般只适合用于广场上的巨型显示器。相对来说,单色的LED点阵显示器应用得更广泛,如公交车上的信息展示牌、店招等。

(4)OLED显示器

新一代的OLED显示器与LED点阵彩色显示器的原理类似,但由于它采用的像素单元是“有机发光二极管”(Organic Light Emitting Diode),所以像素密度比普通LED点阵显示器高得多。

OLED显示器不需要背光源、对比度高、轻薄、视角广及响应速度快等优点。

二、显示器的基本参数

  • 像素

    像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,即前面讲解液晶原理中提到的一个显示单元。

  • 分辨率

    一些嵌入式设备的显示器常常以“行像素值x列像素值”表示屏幕的分辨率。如分辨率800x480表示该显示器的每一行有800个像素点,每一列有480个像素点,也可理解为有800列,480行。

  • 色彩深度

    色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bit)来表示。如单色屏的每个像素点能表示亮或灭两种状态(即实际上能显示2种颜色),用1个数据位就可以表示像素点的所有状态,所以它的色彩深度为1bit,其它常见的显示屏色深为16bit、24bit。RGB888表示可以显示可以2^24种颜色(24bit)。RGB565表示可以i显示2^16种颜色(16bit)。

  • 显示器尺寸

    显示器的大小一般以英寸表示,如5英寸、21英寸、24英寸等,这个长度是指屏幕对角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。

  • 点距

    点距指两个相邻像素点之间的距离,它会影响画质的细腻度及观看距离,相同尺寸的屏幕,若分辨率越高,则点距越小,画质越细腻。如现在有些手机的屏幕分辨率比电脑显示器的还大,这是手机屏幕点距小的原因;LED点阵显示屏的点距一般都比较大,所以适合远距离观看。

三、液晶控制原理

完整的显示屏由 液晶显示面板电容触摸面板以及PCB底板构成。

触摸面板带有触摸控制芯片,该芯片处理触摸信号并通过引出的信号线与外部器件通讯面板中间是透明的,它贴在液晶面板上面,一起构成屏幕的主体,触摸面板与液晶面板引出的排线连接到PCB底板上。

而不带液晶控制器的PCB底板 ,只有小部分的电源管理电路,液晶面板的信号线与外部微控制器相连,直接控制。STM32F429系列的芯片不需要额外的液晶控制器。

(1)液晶面板的控制信号

信号名称 说明
R[7:0] 红色数据
G[7:0] 绿色数据
B[7:0] 蓝色数据
CLK 像素同步时钟信号
HSYNC 水平同步信号
VSYNC 垂直同步信号
DE 数据使能信号
  • CLK

    液晶屏与外部使用同步通讯方式,以CLK信号作为同步时钟,在同步时钟的驱动下,每个时钟传输一个像素点数据。

  • HSYNC

    水平同步信号HSYNC(Horizontal Sync)用于表示液晶屏一行像素数据的传输结束,每传输完成液晶屏的一行像素数据时,HSYNC会发生电平跳变,如分辨率为800x480的显示屏(800列,480行),传输一帧的图像HSYNC的电平会跳变480次。

  • VSYNC

    垂直同步信号VSYNC(Vertical Sync)用于表示液晶屏一帧像素数据的传输结束,每传输完成一帧像素数据时,VSYNC会发生电平跳变。其中“帧”是图像的单位,一幅图像称为一帧,在液晶屏中,一帧指一个完整屏液晶像素点。人们常常用“帧/秒”来表示液晶屏的刷新特性,即液晶屏每秒可以显示多少帧图像,如液晶屏以60帧/秒的速率运行时,VSYNC每秒钟电平会跳变60次。

  • DE

    数据使能信号DE(Data Enable)用于表示数据的有效性,当DE信号线为高电平时,RGB信号线表示的数据有效。

液晶数据传输时序:

液晶屏显示的图像可看作一个矩形,液晶屏有一个显示指针,它指向将要显示的像素。显示指针的扫描方向方向从左到右、从上到下,一个像素点一个像素点地描绘图形。这些像素点的数据通过RGB数据线传输至液晶屏,它们在同步时钟CLK的驱动下一个一个地传输到液晶屏中,交给显示指针,传输完成一行时,水平同步信号HSYNC电平跳变一次,而传输完一帧时VSYNC电平跳变一次。

上图中的参数的解释如下:如果没有按照数据手册进行配置,很有可能导致图像平移或者闪屏花屏。

液晶显示指针在行与行之间,帧与帧之间切换时需要延时,而且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的个数

在这些时间参数控制的区域,数据使能信号线“DE”都为低电平,RGB数据线的信号无效,当“DE”为高电平时,表示的数据有效,传输的数据会直接影响液晶屏的显示区域。

四、显存

液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,这种存储显示数据的存储器被称为显存。

显存一般至少要能存储液晶屏的一帧显示数据,如分辨率为800x480的液晶屏,使用RGB888格式显示,它的一帧显示数据大小为:3x800x480=1152000字节(24bit 三个字节);若使用RGB565格式显示,一帧显示数据大小为:2x800x480=768000字节。

五、LTDC液晶控制器

LTDC液晶控制器,使用SDRAM的部分空间作为显存,可以直接控制液晶面板,无需额外增加液晶控制芯片。

  • STM32的LTDC液晶控制器最高支持800*600分辨率的屏幕。

  • 可支持多种颜色格式,包括RGB888、RGB656、ARGB8888和ARGB1555等。(其中的A是指透明像素)。

  • 支持两层显示数据混合,利用这个特性,可高效地做出背景和前景分离地显示效果,如以视频为背景,在前景显示弹幕。

六、图像数据混合

LTDC外设支持2层数据混合,混合前使用2层数据源,分别为前景层背景层,在输出时,实际上液晶屏只能显示一层图像,所以LTDC在输出数据到液晶屏前需要把2层图像混合成一层。混合时,直接用前景层中的不透明像素替换相同位置的背景像素;而前景层中透明像素的位置,则使用背景的像素数据,即显示背景层的像素

如果想使用图像混合功能,前景层必须使用包含透明的像素格式,如ARGB1555或ARGB8888。其中ARGB1555使用1个数据位表示透明元素,它只能表示像素是透明或不透明,当最高位(即“A”位)为1时,表示这是一个不透明的像素,具体颜色值为RGB位表示的颜色,而当最高位为0时,表示这是一个完全透明的像素,RGB位的数据无效;而ARGB8888的像素格式使用8个数据位表示透明元素,它使用高8位表示“透明度”(即代表“A”的8个数据位),若A的值为“0xFF”,则表示这个像素完全不透明,若A的值为“0x00”则表示这个像素完全透明,介于它们之间的值表示其RGB颜色不同程度的透明度,即混合后背景像素根据这个值按比例来表示。

注意液晶屏本身是没有透明度概念的,如24位液晶屏的像素数据格式是RGB888,RGB颜色各有对应的8根数据线,不存在用于表示透明度的数据线,所以实际上ARGB只是针对内部分层数据处理的格式,最终经过混合运算得出直接颜色数据RGB888才能交给液晶屏显示

七、LTDC结构框图剖析

LTDC框图标号2表示的是图像处理单元,它通过“AHB接口”获取显存中的数据,然后按分层把数据分别发送到两个“层FIFO”缓存,每个FIFO可缓存64x32位的数据,接着从缓存中获取数据交给“PFC”(像素格式转换器),它把数据从像素格式转换成字(ARGB8888)的格式,再经过“混合单元”把两层数据合并起来,最终混合得到的是单层要显示的数据,通过信号线输出到液晶面板。

抖动单元:作用是当像素数据格式的色深大于液晶面板实际色深时,对像素数据颜色进行舍入操作,如向18位显示器上显示24位数据时,抖动单元把像素数据的低6位与阈值比较,若大于阈值,则向数据的第7位进1,否则直接舍掉低6位。

时钟信号:

LTDC外设使用3种时钟信号,包括AHB时钟、APB2时钟及像素时钟LCD_CLK。AHB时钟用于驱动数据从存储器存储到FIFO,APB2时钟用于驱动LTDC的寄存器。而LCD_CLK用于生成与液晶面板通讯的同步时钟,它的来源 是HSE(高速外部晶振),经过“/M”分频因子分频输出到“PLLSAI”分频器,信号由“PLLSAI”中的倍频因子N倍频得到“PLLSAIN”时钟、然后由“/R”因子分频得到“PLLCDCLK”时钟,再经过“DIV”因子得到“LCD-TFT clock”,“LCD-TFT clock”即通讯中的同步时钟LCD_CLK,它使用LCD_CLK引脚输出

八、DMA2D图形加速器

可用于快速绘制矩形、直线、分层数据混合、数据复制以及进行图像数据格式转换,可以把它理解为图形专用的DMA。

(1)结构框图剖析

主要分层为FIFO、PFC及彩色混合器。

  1. FG PFC 与 BG PFC(格式转换): FG PFC(FG Pixel Format Convertor)与BG PFC(BG Pixel Format Convertor)是两个像素格式转换器,分别用于前景层和背景层的像素格式转换,不管从FIFO的数据源格式如何,都把它转化成字的格式(即32位),ARGB8888

图中的“ɑ”表示Alpha,即透明度,经过PFC,透明度会被扩展成8位的格式

图中的“CLUT”表示颜色查找表(Color Lookup Table),颜色查找表是一种间接的颜色表示方式,它使用一个256x32位的空间缓存256种颜色,颜色的格式是ARGB8888或RGB888。 每个像素点可以使用一个字节表示出三个字节所要表示出的颜色。

利用颜色查找表,实际的图像只使用这256种颜色,而图像的每个像素使用8位的数据来表示,该数据并不是直接的RGB颜色数据,而是指向颜色查找表的地址偏移,即表示这个像素点应该显示颜色查找表中的哪一种颜色。在图像大小不变的情况下,利用颜色查找表可以扩展颜色显示的能力,其特点是用8位的数据表示了一个24或32位的颜色,但整个图像颜色的种类局限于颜色表中的256种。DMA2D的颜色查找表可以由CPU自动加载或编程手动加载

DMA2D如何使用?

  • 控制

  • 前景层FIFO和背景层FIFO

    根据像素格式转换器PFC中定义的颜色格式获取像素,去处理前景层与背景层的输入数据。编程所需要寄存器:

  • FPC

    转换器在第一阶段转换颜色格式。前景层像素和背景层像素的原始颜色格式分别通过 DMA2D_FGPFCCR 和 DMA2D_BGPFCCR 的 CM[3:0] 位来配置:

  • CLUT

    支持如下三种访问:

    • PFC 在像素格式转换期间读取 CLUT

    • CPU 对 CLUT 进行数据的读取或写入时,通过 AHB 从设备端口访问 CLUT

    • 执行自动加载 CLUT 时,通过 AHB 主设备端口进行 CLUT 写入

  1. 混合器

FIFO中的数据源经过PFC像素格式转换器后,前景层和背景层的图像都输入到混合器中运算:

从公式可以了解到混合器的运算主要是使用前景和背景的透明度作为因子,对像素RGB颜色值进行加权运算。经过混合器后,两层数据合成为一层ARGB8888格式的图像。

混合器不需要任何配置寄存器。是否使用混合器取决于 DMA2D_CR 寄存器的 MODE[1:0] 字段中定义的 DMA2D 工作模式。

  1. OUT FPC

OUT PFC是输出像素格式转换器,它把混合器转换得到的图像转换成目标格式,如ARGB8888、RGB888、RGB565、ARGB1555或ARGB4444,具体的格式可根据需要在输出PFC控制寄存器DMA2D_OPFCCR中选择。

九、以上的总结

STM32F429芯片使用LTDC、DMA2D及RAM存储器,构成了一个完整的液晶控制器。LTDC负责不断刷新液晶屏,DMA2D用于图像数据搬运、混合及格式转换,RAM存储器作为显存。其中显存可以使用STM32芯片内部的SRAM或外扩SDRAM/SRAM,只要容量足够大即可(至少要能存储一帧图像数据)。

LTDC-DMA2D液晶显示原理(一)相关推荐

  1. 第27章 LTDC/DMA2D—液晶显示—零死角玩转STM32-F429系列

    第27章     LTDC/DMA2D-液晶显示 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  2. LTDC/DMA2D—液晶显示

    本章参考资料:<STM32F4xx 参考手册 2>.<STM32F4xx 规格书>.库帮助文档 <stm32f4xx_dsp_stdperiph_lib_um.chm&g ...

  3. 液晶显示原理与ILI9341的使用

    转载自金沙滩工作室<https://mp.weixin.qq.com/s/JME3VArPETgPjD0n_cHKNQ> 液晶显示原理   TFT-LCD(Thin Film Transi ...

  4. 液晶显示原理以及FPGA驱动

    注:文中代码来源于网络,只用于学习和理解. 液晶显示(LCD)是英文Liquid Crystal Display 的简写,一般与液晶显示器连接的接口为VGA和HDMI. 高清多媒体接口(High De ...

  5. 第28章 LTDC—液晶显示中英文

    本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>. 关于开发板配 ...

  6. TN,STN,TFT各种液晶显示技术的原理!

    URL:http://blog.sina.com.cn/s/blog_6c05e0530100r26r.html 1.TN型液晶显示原理 TN型的液晶显示技术可说是液晶显示器中最基本的,而之后其它种类 ...

  7. STM32 的图形加速器 DMA2D

    STM32 的图形加速器 DMA2D 1. 背景 ​ 在实际使用 LTDC 控制器控制液晶屏时,配置好的显存地址写入要显示的像素数据,LTDC 就会把这些数据从显存中搬运到液晶面板进行显示.实际上要显 ...

  8. LCD液晶显示器 ----------- 原理篇

    LCD 液晶显示原理 1. 背景 ​ 在做嵌入式开发时,经常用到 LCD 显示屏,因为用户只能看得懂显示屏中的画面.因此,熟练掌握显示屏原理是非常有必要的,所以让我们来揭开LCD 显示屏的神秘面纱,进 ...

  9. 【STM32H7教程】第51章 STM32H7的LTDC应用之LCD汉字显示和2D图形显示

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第51章       STM32H7的LTDC应用之LCD汉字 ...

最新文章

  1. 只求规模不管服务?那平台就离死不远了
  2. Spring Boot2.0之整合Redis
  3. java 利用JAX-RS快速开发RESTful 服务
  4. 硬盘基本知识(磁头、磁道、扇区、柱面) 转
  5. stringstream的基本用法
  6. 如何获取filecoin_Filecoin如何获取更大的出块机会?
  7. 9 PP配置-生产主数据-工作中心相关-定义工序控制码
  8. linux控制协程参数,Linux高性能网络:协程系列05-协程实现之原语操作
  9. 俞昆20155335《网络对抗》MSF基础应用
  10. c11语言编译器,GNU C编译器的gnu11和c11
  11. 雷电模拟器手游辅助制作教程
  12. .NET/C#大型项目研发必备(12)--使用MQ消息队列
  13. 哪个邮箱好用又安全?群发邮件哪个邮箱好用?
  14. 设计模式_访问者模式
  15. 实时调度论文中经常出现的术语 ties broken arbitrary的意思
  16. maven项目构建ssh工程(父工程与子模块的拆分与聚合)
  17. c语言开发桌面应用合适吗,什么编程语言比较适合开发桌面应用程序?
  18. RiPro主题高级美化包支持最新版(附安装说明)
  19. Xmind 2022 Mac思维导图软件
  20. C#基于开源地图GMap的开发示例

热门文章

  1. c语言求出伍位数,简介 模拟银行的钱数大写输出例如345叁肆伍方法/步骤 首先打开VC++ 文件》》》新建 创建一个C++空白文档 先声明头文件复制代码 代码...
  2. 从投资者的视角——区块链简史
  3. Cisco 产品命名规则
  4. 谁是幕后英雄?笔记本代工关系大揭秘
  5. 智慧体育场馆信息化建设 解决方案
  6. FPGA学习日记(七)HDMI图像数据传输
  7. C语言编写一个简单的扫雷
  8. pmp认证在中国IT企业的用处!
  9. 使用cpolar远程访问群晖NAS
  10. E5061B矢量网络分析仪VNA概念