本章参考资料:《STM32F4xx 参考手册 2》、《STM32F4xx 规格书》、库帮助文档
《stm32f4xx_dsp_stdperiph_lib_um.chm》。
关于开发板配套的液晶屏参数可查阅《5.0 寸液晶屏数据手册》配套资料获知。

显示器简介
显示器属于计算机的 I/O 设备,即输入输出设备。它是一种将特定电子信息输出到屏
幕上再反射到人眼的显示工具。 常见的有 CRT 显示器、液晶显示器、 LED 点阵显示器及
OLED 显示器。

液晶显示器
液晶显示器,简称 LCD(Liquid Crystal Display),相对于上一代 CRT 显示器(阴极射线
管显示器), LCD 显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成
为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备
的显示器。图 27-1 是液晶电视与 CRT 电视的外观对比,很明显液晶电视更薄,“时尚”
是液晶电视给人的第一印象,而 CRT 电视则感觉很“笨重”。

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

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

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

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

OLED 显示器不需要背光源、对比度高、轻薄、视角广及响应速度快等优点。待到生
产工艺更加成熟时,必将取代现在液晶显示器的地位,见图 27-5。

显示器的基本参数
不管是哪一种显示器,都有一定的参数用于描述它们的特性,各个参数介绍如下:
(1) 像素
像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,即前面讲解液
晶原理中提到的一个显示单元。
(1) 分辨率
一些嵌入式设备的显示器常常以“行像素值 x 列像素值”表示屏幕的分辨率。如分辨
率 800x480 表示该显示器的每一行有 800 个像素点,每一列有 480 个像素点,也可理
解为有 800 列, 480 行。
(2) 色彩深度
色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位” (bit)来表示。如单
色屏的每个像素点能表示亮或灭两种状态(即实际上能显示 2 种颜色),用 1 个数据位

就可以表示像素点的所有状态,所以它的色彩深度为 1bit,其它常见的显示屏色深为
16bit、 24bit。
(3) 显示器尺寸
显示器的大小一般以英寸表示,如 5 英寸、 21 英寸、 24 英寸等,这个长度是指屏幕对
角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。
(4) 点距
点距指两个相邻像素点之间的距离, 它会影响画质的细腻度及观看距离,相同尺寸的
屏幕,若分辨率越高,则点距越小,画质越细腻。如现在有些手机的屏幕分辨率比电
脑显示器的还大,这是手机屏幕点距小的原因; LED 点阵显示屏的点距一般都比较大,
所以适合远距离观看。

STM32F429 系列的芯片不需要额外的液晶控制器,也就是说它把专用液晶控制器的功能集成到 STM32F429 芯片内部了,节约
了额外的控制器成本。

(1) RGB 信号线
RGB 信号线各有 8 根,分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量。使用
红绿蓝颜色分量来表示颜色是一种通用的做法,打开 Windows 系统自带的画板调色工
具,可看到颜色的红绿蓝分量值,见图 27-7。常见的颜色表示会在“RGB”后面附带
各个颜色分量值的数据位数,如 RGB565 表示红绿蓝的数据线数分别为 5、 6、 5 根,
一共为 16 个数据位,可表示 216 种颜色;而这个液晶屏的种颜色分量的数据线都有 8
根,所以它支持 RGB888 格式,一共 24 位数据线,可表示的颜色为 224种。

(2) 同步时钟信号 CLK
液晶屏与外部使用同步通讯方式,以 CLK 信号作为同步时钟,在同步时钟的驱动下,
每个时钟传输一个像素点数据。
(3) 水平同步信号 HSYNC
水平同步信号 HSYNC(Horizontal Sync)用于表示液晶屏一行像素数据的传输结束,每
传输完成液晶屏的一行像素数据时, HSYNC 会发生电平跳变,如分辨率为 800x480 的
显示屏(800 列, 480 行),传输一帧的图像 HSYNC 的电平会跳变 480 次。
(4) 垂直同步信号 VSYNC
垂直同步信号 VSYNC(Vertical Sync)用于表示液晶屏一帧像素数据的传输结束,每传
输完成一帧像素数据时, VSYNC 会发生电平跳变。其中“帧”是图像的单位,一幅
图像称为一帧,在液晶屏中,一帧指一个完整屏液晶像素点。人们常常用“帧/秒”来

表示液晶屏的刷新特性,即液晶屏每秒可以显示多少帧图像,如液晶屏以 60 帧/秒的
速率运行时, VSYNC 每秒钟电平会跳变 60 次。
(5) 数据使能信号 DE
数据使能信号 DE(Data Enable)用于表示数据的有效性,当 DE 信号线为高电平时,
RGB 信号线表示的数据有效。

液晶数据传输时序
通过上述信号线向液晶屏传输像素数据时,各信号线的时序见图 27-8。 图中表示的是
向液晶屏传输一帧图像数据的时序, 中间省略了多行及多个像素点。

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

显存
液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,
再传输给液晶屏,这种存储显示数据的存储器被称为显存。显存一般至少要能存储液晶屏
的一帧显示数据,如分辨率为 800x480 的液晶屏,使用 RGB888 格式显示,它的一帧显示
数据大小为: 3x800x480=1152000 字节;若使用 RGB565 格式显示,一帧显示数据大小为:
2x800x480=768000 字节。

常见的颜色表示会在“RGB”后面附带各个颜色分量值的数据位数,如RGB565
表示红绿蓝的数据线数分别为5、 6、 5根,一共为16个数据位,可表示216
种颜色;而我们这个液晶屏的种颜色分量的数据线都有8根,所以它支持
RGB888格式,一共24位数据线,可表示的颜色为224种。

RGB后面的数值,分别代表其表示颜色的bits。

LCD-TFT 控制器 (LTDC)
LTDC 液晶控制器简介
STM32F429 系列芯片内部自带一个 LTDC 液晶控制器,使用 SDRAM 的部分空间作为
显存,可直接控制液晶面板,无需额外增加液晶控制器芯片。 STM32 的 LTDC 液晶控制器
最高支持 800x600 分辨率的屏幕;可支持多种颜色格式,包括 RGB888、 RGB565、
ARGB8888 和 ARGB1555 等(其中的“A”是指透明像素);支持 2 层显示数据混合,利用这
个特性,可高效地做出背景和前景分离的显示效果,如以视频为背景,在前景显示弹幕。

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

如果想使用图像混合功能,前景层必须使用包含透明的像素格式,如 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 框图标号表示的是图像处理单元,它通过“AHB 接口”获取显存中的数据,
然后按分层把数据分别发送到两个“层 FIFO”缓存,每个 FIFO 可缓存 64x32 位的数据,
接着从缓存中获取数据交给“PFC” (像素格式转换器),它把数据从像素格式转换成字
(ARGB8888)的格式,再经过“混合单元”把两层数据合并起来,最终混合得到的是单层要
显示的数据,通过信号线输出到液晶面板。这部分结构与 DMA2D 的很类似,我们在下一
小节详细讲解。
在输出前混合单元的数据还经过一个“抖动单元”,它的作用是当像素数据格式的色
深大于液晶面板实际色深时,对像素数据颜色进行舍入操作,如向 18 位显示器上显示 24
位数据时,抖动单元把像素数据的低 6 位与阈值比较,若大于阈值,则向数据的第 7 位进
1,否则直接舍掉低 6 位。

配置和状态寄存器
框图中标号表示的是 LTDC 的控制逻辑,它包含了 LTDC 的各种配置和状态寄存器。
如配置与液晶面板通讯时信号线的有效电平、各种时间参数、有效数据宽度、像素格式及
显存址等等, LTDC 外设根据这些配置控制数据输出,使用 AHB 接口从显存地址中搬运数
据到液晶面板。还有一系列用于指示当前显示状态和位置的状态寄存器,通过读取这些寄
存器可以了解 LTDC 的工作状态。
时钟信号
LTDC 外设使用 3 种时钟信号,包括 AHB 时钟、 APB2 时钟及像素时钟 LCD_CLK。
AHB 时钟用于驱动数据从存储器存储到 FIFO, APB2 时钟用于驱动 LTDC 的寄存器。而
LCD_CLK 用于生成与液晶面板通讯的同步时钟,见图 27-12,它的来源是 HSE(高速外部
晶振),经过“/M”分频因子分频输出到“PLLSAI”分频器,信号由“PLLSAI”中的倍频
因子 N 倍频得到“PLLSAIN”时钟、然后由“/R”因子分频得到“PLLCDCLK”时钟,再
经过“DIV”因子得到“LCD-TFT clock”,“LCD-TFT clock”即通讯中的同步时钟
LCD_CLK,它使用 LCD_CLK 引脚输出。


/************************************************2017.7.29***************************************************************/

LTDC 初始化结构体

这里有很多涉及寄存器的东西,如果不是必要,不用自己去配置。

但是却有几个值得注意的地方:

第一:关于LTDC的引脚复用:

看到上图不要以为LCD_G3和LCD_B2可以同时使用一个引脚,LCD_B2还有其他引脚可以使用,只是提醒自己不要以为复用只有AF14的LCD,在AF9处还隐藏着有LCD的复用功能。

有可能是复用AF14也可能是复用AF9,具体如何选择AF14还是AF9的复用呢?在stm32f4xx_gpio.h中:

期间当然还有更多的复用选择:

需要注意的是这里LTDC复用不是单纯的只有AF14,还有AF9的。

第二点:用sdram写点刷屏方式:

这样可能会在屏幕下方有乱码或者花屏这样的现象,此时需要更改sdram中的一个配置:

static void SDRAM_InitSequence(void)函数中的:

突发长度如果配置成8可能会出现上面所说的花屏问题,改成4之后,得到了解决。

/************************************************2017.7.29***************************************************************/

LTDC/DMA2D—液晶显示的更多相关文章

  1. 第27章 LTDC/DMA2D—液晶显示

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

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

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

  3. LTDC/DMA2D——液晶显示

    1.显示器的基本参数 (1) 像素像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点. (2) 分辨率一些嵌入式设备的显示器常常以“行像素值 x列像素值”表示屏幕的分辨率.如分辨率 800x ...

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

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

  5. 【STM32H7教程】第55章 STM32H7的图形加速器DMA2D的基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第55章       STM32H7的图形加速器DMA2D的基 ...

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

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

  7. 【STM32H7教程】第50章 STM32H7的LCD控制器LTDC基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第50章       STM32H7的LCD控制器LTDC基础 ...

  8. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2019-12-12)

    说明: 争取做更多的实战性应用,分享更多的嵌入式技术,希望能在实际项目中帮到大家. (1)V7将大力加强对初学者的支持力度,已经更新至63章,下载链接,后37章和一批视频教程将加紧制作. (2)事隔五 ...

  9. 第28章 LTDC—液晶显示中英文—零死角玩转STM32-F429系列

    第28章     LTDC—液晶显示中英文 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

随机推荐

  1. [SpriteKit] 系统框架中Cocos2d-x制作小游戏ZombieConga

    概述 使用SpriteKit实现一个简单的游戏, 通过一个游戏来进行SpriteKit的入门, 熟练2D游戏的API, 也可以更好的结合在iOS应用中. 详细 代码下载:http://www.demo ...

  2. AsyncTask和AsyncQueryHandler之比较

    定义AsyncTask子类 private class LoadContactsTask extends AsyncTask<Void, Void, List<TxrjContact> ...

  3. 【TP3.2】:日志记录和查看

    1.TP3.2手册日志类链接:http://document.thinkphp.cn/manual_3_2.html#log 2.日志默认路径:/Application/Runtime/Logs 3. ...

  4. PHP实现以UTF8格式截取指定字符串位数

    PHP代码: /* UTF8格式截取字符串,并且指定截取位数 */ function cut_string($string="",$num=20){ if(mb_strlen($s ...

  5. js 随机变换图片

    <div style="position:absolute;left:40%;top:10%;border-style:dotted"> <img src=&qu ...

  6. C 应用

    前言 1)操作符两端必须加空格,(每行第一个赋值语句对齐). 2)变量名必须是英文(不能是拼音):英文.数字.下划线和美元符号. 3)等于号 == 反过来写(0 == i%4)防止少些赋值号的错误. ...

  7. C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数

    C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] ...

  8. RabbitMQ与.net core(二)Producer与Exchange

    Producer:消息的生产者,也就是创建消息的对象 Exchange:消息的接受者,也就是用来接收消息的对象,Exchange接收到消息后将消息按照规则发送到与他绑定的Queue中.下面我们来定义一 ...

  9. C#基础 - C# 的 常见概念简述

    在上篇文章中,你跟着我写了一个HelloWorld,本篇中,我们来谈谈一些C#程序中的小概念 1.C# 程序结构 一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declarat ...

  10. 《JAVA与模式》之参考资料

    1.书籍 <JHead First 设计模式(中文版)> <JAVA与模式> <大话设计模式> 2.连接地址 http://blog.csdn.net/jason0 ...