本章参考资料:《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***************************************************************/

转载于:https://www.cnblogs.com/yangguang-it/p/7227356.html

LTDC/DMA2D—液晶显示相关推荐

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

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

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

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

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

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

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

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

  5. stm32h7 UART dma接收不到数据_【STM32H7】第4章 ThreadX GUIX上手之STM32H7 LTDC基础知识 - 安富莱电子...

    最新教程下载: 本章教程为大家讲解LTDC应用中最基本的汉字显示和2D图形显示功能实现. 初学者重要提示 LCD相关的基础支持 LCD硬件设计 LCD驱动设计 LCD板级支持包(和) LCD的驱动移植 ...

  6. vs如何自动生成基本的代码_STM32CubeMX底层配置代码自动代码生成

    STM32CubeMX + HAL  一些说明    底层配置    Cube基本使用    HAL库函数    中断回调函数    外设对应时钟  配置示例    小编有话说    RTC    S ...

  7. 触摸屏和显示屏参考文献

    一般MCU屏都会自带显存,接口为16位的80并口,相当于支持RGB565模式, 驱RGB屏的话要用到STM32F429的LTDC+DMA2D模块,外加SDRAM作为显存 TFT-LCD显示原理及驱动介 ...

  8. 001----手把手教你制作TouchGFX的工程模板

    手把手教你制作TouchGFX的工程模板 开发环境:CubeMX5.6.1(packages–F4–1.25.0).Keil5(5.30.0.0–Keil.STM32F4xx_DFP.2.9.0).T ...

  9. 【RT-ThreadART-PI】RGB565_LCD显示屏的使用

    一.添加 LCD 配置 1.1.添加 Kconfig 配置 打开 LCD 配置的同时默认使能了 SDRAM 以及动态内存分配,主要目的是可以使用片外32M的 SDRAM 作为显存. 1.2.添加 SC ...

最新文章

  1. ubuntu 9.10 输入法
  2. Ubuntu18.04 Numix
  3. VS.Net 的一些小技巧
  4. 快速的找出元素是否在list中 python
  5. JavaScript的检测及其数据类型
  6. 数据库索引统计信息不一致_列存储索引增强功能–克隆数据库中的索引统计信息更新
  7. Linux下的socket网络编程
  8. react脚手架构建工程
  9. MATLAB计算卫星相对位置、速度和加速度
  10. 在SQL Sever中使用form membership认证
  11. requests 模块获取免费的代理并检测代理 IP 是否有效!
  12. 家谱文化④:江苏百岁老人多达8375人,健康长寿的秘密都写在家谱
  13. 使用fetch 遇到的ReadableStream is locked 的问题
  14. 感染 <SCRIPT Language=VBScript> DropFileName = “svchost.exe” Ramnit 蠕虫病毒 HTML清除工具
  15. VBS实现的日程提醒小工具
  16. sh shell实现自动杀死cpu占用最高的pid,同时当cpu超过95%自动重启apache
  17. java 手机号归属地查询
  18. SDU_week4_A - DDL 的恐惧(贪心+作业调度问题)
  19. Windows计算器:%号的作用
  20. Win10应用图标变白块修复桌面白图标

热门文章

  1. 微信企业号第三方应用开发[二]——创建应用
  2. 2015年10月13日
  3. jmeter学习笔记(一)
  4. AS(Autonomous System)
  5. 转:OAUTH协议简介
  6. 扩展 CommandField 类别 - Header 加入新增钮
  7. C# 调用python
  8. postman提取返回值
  9. 基于zbus的MySQL透明代理(100行)
  10. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装