024 - STM32学习笔记 - 液晶屏控制(一) - LTDC与DMA2D初始

news2024/10/4 22:44:40

024- STM32学习笔记 - LTDC控制液晶屏

在学习如何控制液晶屏之前,先了解一下显示屏的分类,按照目前市场上存在的各种屏幕材质,主要分为CRT阴极射线管显示屏、LCD液晶显示屏、LED显示屏、OLED显示屏,在F429的开发板上,配套的是LCD液晶显示屏(分辨率800*480)。

LCD液晶显示屏,是通过给内部的液晶(一种介于液态与固态之间,但其分子排列和和固态晶体一样规则的有机化合物)施加电场,改变其分子排列,从而改变光线传播方向,配合前后两片偏振光片以及RGB滤光片,可以控制其颜色,再通过改变电压大小,控制透光率,从而改变颜色的深浅。每个RGB为一个像素点,很多个RGB通过组合后,可以组合出来很多种颜色。

LCD本身不发光,因此在LCD屏幕的背后都会有一块背光板(白光),而且因为液晶的特性,所以我们经常会看到因为存储液晶的容器一旦破裂,会出现漏液或者漏光的情况。LCD在颜色变幻时,因为液晶晶体转动需要消耗时间,因此我们会感觉到LCD屏幕的响应时间会比较慢。

剩下关于LED和OLED在这里就不做介绍了,有兴趣的可以去找一些相关资料看看。

一、显示器基本参数

这里关于显示器需要了解的点主要有以下几个:

1、像素:

像素是图像的最基本要素,也是显示器的最小显示单位(点)。

2、分辨率:

分辨率表示的是显示器上“行像素数 * 列像素数”,例如:1920*1080表示的是每行有1920个像素点,每列有1080个像素点,同样可以理解为一共有1920列,1080行,因此该显示器的总像素数就是1920 * 1080 = 2073600个像素点。

3、色彩深度:

这个参数很多人应该都没注意到,色彩深度指的是显示器的每个像素点能表示多少中颜色,比如路边商铺上常用的LED单色显示屏来说,单色屏的每个像素点只有亮或灭两种状态,因此只需要一个数据位就可以表示其所有状态,所以单色屏的色彩深度为1bit,其余我们见到的彩色显示屏的深度一般为16bit、24bit。

4、显示器尺寸:

显示器尺寸大小以寸(英寸)为单位表示,如:3.7寸、7寸、32寸等,是屏幕对角线的长度,对角线的长度结合屏幕的长宽比(例如16:9)就可以确定显示器的具体长度和宽度了。

5、点距:

点距表示的是两个相邻像素点之间的间距,在相同尺寸的屏幕下,点距越小,屏幕的分辨率越高,相应的制造工艺越复杂,成本也越高。

二、液晶控制原理

我们这里用到的显示屏,是由液晶显示面板、电容触摸面板以及PCB底板组成。触摸面板带有触摸控制芯片,与液晶面板引出的排线连接到PCB底板上,通过液晶控制器芯片与STM32进行通讯,部分STM32不自带液晶控制器,因此显示器需自带,我这里使用的F429集成了液晶控制器,因此配套的显示器并没有液晶控制器。

在液晶面板上,引出的控制信号线如下:

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

1、RGB信号线

RGB信号线每个通道各有8根,分别表示每个像素点的红、绿、蓝颜色的分量,因此每个像素点的每个通道色彩分量可以表示为0-255种,比如RGB565表示红绿蓝三个通道数据线分别是5、6、5根,数据位一共16,因此可表示为216种颜色,色彩深度为16bit,而我用到的液晶屏三种颜色通道数据线各有8根,因此可显示颜色为224种,色彩深度为24bit。

2、同步时钟信号CLK

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

3、水平同步信号HSYNC

水平同步信号表示液晶屏一行像素数据的传输结束,每次传输完成液晶屏一行像素数据时,HSYNC都会发生一次电平跳变,比如分辨率为800x480分辨率的显示屏,传输一帧不想时HSYNC的电平会跳变480次,这里注意跳变次数与行数是对应的。

4、垂直同步信号VSYNC

垂直同步信号是指每一帧像素数据传输结束后,VSYNC会发生一次跳变,也就是说,当液晶屏上显示一次完整的图像时,VSYNC会发生跳变,玩哪些3A大作游戏的伙伴们,一般在挑选显示器时,会关注刷新率的参数,这个刷新率例如60Hz、144Hz等,表示的就是每秒刷新多少次,即触发多少次VSYNC跳变。

5、数据使能信号DE

数据使能信号表示数据的有效性,当DE信号线为高电平时,RGV信号线表示的数据有效。

三、液晶数据传输时序

向液晶屏传输数据时,我们可以将液晶屏上面的像素点按照行去展开,例如800*480分辨率的显示屏。展开后第1个像素点为第1行第1列的像素点,第481个像素点为第2行第1列的像素点,由此往下类推,这时候我们想象出来一个指针,这个指针指向下一个要显示的像素点,这个指针的扫描方向在显示屏上应该是由左到右、从上向下的一个点一个点的移动,当指向像素点时,通过DE使能信号的使能下,将RGB信号线的数据发送到指向的像素点,再在CLK时钟的驱动下移向下一个像素点,每传输一行像素数据时,水平同步信号HSYNC触发一次,当所有像素点全部传输完成后,垂直同步信号HSYNC再触发一次,之后指针再次移回到最开始的位置,即第一行第一列。

这里我们是将显示屏上的像素点拉成一条线去说明的,但是实际上显示指针在行与行、帧与帧之间切换存在一定的延迟,并且水平同步和垂直同步信号本身有一定的宽度,这些时间参数如下表:

时间参数参数说明
水平后沿(VBP:vertical back porch)表示一帧图像开始时,垂直同步信号以后的无效行数
水平前沿(VFP:vertical front porch)表示一帧图像结束后,垂直同步信号以前的无效行数
垂直后沿(HBP:horizontal back porch)表示从水平同步信号开始到有效数据开始前的CLK的个数
垂直前延(HFP:horizontal front porch)表示一行有效数据就鳄属到下一个水平同步信号开始之间的CLK的个数
垂直信号宽度(VSW:vertical sync width)表示垂直同步信号的宽度,单位为行
水平信号宽度(HSW:horizontal sync width)表示水平同步信号的宽度,单位为同步时钟CLK的个数

看这个表,我估计多数人会比较懵,用一张图来分析一下各个时间参数表示的含义:

在这里插入图片描述

因为生产制造工艺的问题,显示屏整个显示区域中,并不是所有像素点都是可用的,如上图中,实际上关于上表中的各项时间参数,可以认为是为了对非有效显示区域的限制,在这里使能控制信号,只有像素指针到了有效显示区域内,才会变为高电平,其余位置均低电平。

四、显存

这里说的显存是指屏幕中所有像素点的颜色数据缓存起来,再传给显示屏,这种存储显示数据的存储器被称为显存,显存的容量至少要能存储显示器的一帧显示数据,分辨率为800*400的液晶屏如果使用RGB888格式显示,则其一帧数据大小为(8+8+8)x 800 x 480 = 9216000bit / 8 = 1152000Byte,如果适用RGB565格式显示,则一帧图像数据大小为(5+6+5)x 800 x 480 = 6144000bit / 8 = 768000Byte。

五、LTDC液晶控制器

上面提到F429本身自带液晶控制器,可以适用SDRAM的部分空间作为显存,不需要液晶屏再增加液晶控制器芯片了。ST,32的LTDC液晶控制器最高支持800 x 600分辨率的像素,支持多种颜色格式,包括RGB888、RGB565、ARGB8888和ARGB1555(A表示透明像素);支持2层显示数据混合,可以利用这个特性制作出背景和前景分离的效果,比如背景播放视频,前景显示字幕。

如果需要适用数据混合功能,前景曾必须适用包含透明的像素格式,如ARGB8888或者ARGB1555,里面的字母和数字是对应的,比如ARGB1555表示的是透明像素层(A)只用1位表示像素透明或者不透明,后面的几位则是表示RGB通道的颜色深度,而ARGB8888里面,透明像素则可以表示透明深度。

关于液晶屏这里,需要注意的是液晶屏本、身是没有透明度的参数的,比如24位液晶屏RGB888,只有RGB颜色各对应的8根数据线,不存在表示透明度的数据线,所以实际上ARGB也只是针对于内部分层数据处理的格式,通过液晶控制器混合计算出直接颜色数据通过RGB三根数据线发送给液晶屏显示,这里就跟我们使用PS软件绘图时,通过图层混合后,最终输出的jpg的图片一样。

关于LTDC这里通过下面几个部分来进行学习:

LTDC结构:

LTDC主要包含信号线、图像处理单元、寄存器以及时钟信号,其结构如下图:

在这里插入图片描述

1、LTDC信号线:

LTDC信号线与液晶屏的数据线时一一对应的,包含RGB数据线、水平&垂直同步信号线、时钟信号线以及使能信号线,下表是查询《STM32F4XX规格书》整理出来的对应引脚号。

引脚号LTDC 信号引脚号LTDC 信号引脚号LTDC 信号引脚号LTDC 信号
PA3LCD_B5PE11LCD_G3PH14LCD_G3PJ4LCD_R5
PA4LCD_VSYNCPE12LCD_B4PH15LCD_G4PJ5LCD_R6
PA6LCD_G2PE13LCD_DEPI0LCD_G5PJ6LCD_R7
PA8LCD_R6PE14LCD_CLKPI1LCD_G6PJ7LCD_G0
PA11LCD_R4PE15LCD_R7PI2LCD_G7PJ8LCD_G1
PA12LCD_R5PF10LCD_DEPI4LCD_B4PJ9LCD_G2
PB8LCD_B6PG6LCD_R7PI5LCD_B5PJ10LCD_G3
PB9LCD_B7PG7LCD_CLKPI6LCD_B6PJ11LCD_G4
PB10LCD_G4PG10LCD_B2PI7LCD_B7PJ12LCD_B0
PB11LCDG5PG11LCD_B3PI9LCD_VSYNCPJ13LCD_B1
PC6LCD_HSYNCPG12LCD_B1PI10LCD_HSYNCPJ14LCD_B2
PC7LCD_G6PH2LCD_R0PI12LCD_HSYNCPJ15LCD_B3
PC10LCD_R2PH3LCD_R1PI13LCD_VSYNCPK0LCD_G5
PD3LCD_G7PH8LCD_R2PI14LCD_CLKPK1LCD_G6
PD6LCD_B2PH9LCD_R3PI15LCD_R0PK2LCD_G7
PD10LCD_B3PH10LCD_R4PJ0LCD_R1PK3LCD_B4
PE4LCD_B0PH11LCD_R5PJ1LCD_R2PK4LCD_B5
PE5LCD_G0PH12LCD_R6PJ2LCD_R3PK5LCD_B6
PE6LCD_G1PH13LCD_G2PJ3LCD_R4PK6LCD_B7
2、图像处理单元

在上图中②表示的是图像处理单元,通过AHB接口获取显存中的数据,然后按照分层把数据发送到两个”层FIFO“缓存中,将每个FIFO可以缓存64*32位的数据,紧接着再由缓存中获取数据交给PFC(像素格式转换器),将数据从像素格式转换成字(ARGB8888)格式,通过混合单元将两层数据合并,再通过信号线将混合得到的单层数据发送到液晶屏上。

输出数据前,数据还要经过一个抖动单元,作用是当输出数据的色彩深度大于显示屏实际的色彩深度时,对像素颜色进行舍入操作,比如,当向16位显示器上输入24位色彩深度的数据时,抖动单元会把像素数据的低8位(24-16)数据与阈值比较,若大于阈值,则向第9位进1,否则直接舍掉后面的8位。

3、配置和状态寄存器

图中标4的表示的是LTDC的控制逻辑,包含了LTDC的各种配置和状态寄存器。需要配置的参数有通讯时信号线的有效电平、各种时间参数、有效数据宽度、像素格式及显存地址等等,LTDC通过这些配置控制输出,将AHB接口从显存位置搬运过来的数据输出到显示器,同时可以通过用于指示当前显示状态和位置的状态寄存器去获取LTDC的工作状态。

4、时钟信号

LTDC使用到3中时钟信号,AHB时钟、APB2时钟及像素时钟LCD_CLK,其中AHB时钟用于驱动数据从存储器存储到FIFO,APB2时钟用于驱动LTDC的驱动器,而LCD_CLK则是与显示器的通讯同步时钟,时钟树如下图:

在这里插入图片描述

这里可以看到LCD_CLK来源于HSE,经过M分频因子输出到PLLSAI分频器,有PLLSAI中的倍频因子N得到”LCD-TFT clock“,这里的”LCD-TFT clock“就是通讯中的同步时钟LCD_CLK,通过LCD_CLK引脚输出,即PI14引脚。

六、DMA2D图形加速器

实际使用LTDC控制液晶屏显示的时候,往配置好的显存地址中写入要显示的像素数据,LTDC会将这些数据从显存经过一系列处理后在发送到液晶屏,但是上面我们通过计算,发现每帧显示的数据量非常大,如果仅仅是单帧数据的话还好说,如果是视频类的图像,对于处理器来说工作量是相当大的,之前学习过DMA外设,STM32针对于这个需求,专门定制了用于图像数据搬运的DMA2D外设,可以快速绘制矩形、直线、分层数据混合、数据复制以及图像数据格式转换,是图像专用的DMA外设。

DMA2D的结构框图与LTDC结构中的图像处理单元很类似,主要为分层FIFO、PFC及彩色混合器。

在这里插入图片描述

1、FG FIFO与BG FIFO

FG FIFO与BG FIFO是两个64*32位大小的缓冲区,分别用于缓冲前景层和背景层从AHB总线获取的像素数据。AHB总线的数据源一般是SDRAM也就是说再LTDC外设中配置的前景层和背景层的数据源地址一般指向SDRAM的存储空间,使用SDRAM的部分空间作为显存。

2、FG PFC和BG PFC

FG PFC和BG PFC是两个像素格式转换器,分别用于前景层和背景层的像素格式转换,不管从FIFO的数据源格式如何,通过其转换后都为ARGB8888格式(32位)。

图中的“α”表示Alpha(透明度),经过PFC处理后,透明度会被扩展位8位格式。

图中的CLUT表示颜色查找表,是一种间接的颜色表示方式,使用一个256*32位的空间缓存256种颜色,颜色格式是ARGB8888或RGB888,实际图像只是用这256种颜色,图像的每个像素点使用8位数据表示,但是该数据不是直接的RGB颜色,而是指向颜色查找表的地址便宜,可以理解为像素点应该显示的颜色对应的是颜色查找表里面的颜色,在图像大小不变的情况下,利用颜色查找表i可以扩展颜色显示的能力,特点就是可以用8位的数据表示一个24或者32位的颜色,整个图像种的颜色种类受限于颜色查找表中的256种。DMA2D可以通过CPU自行加载或者编程手动加载。

在这里插入图片描述

3、混合器

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

在这里插入图片描述

混合器的运算主要使用前景和背景的透明度作为因子,对像素的RGB颜色进行加权运算,通过混合器将两层数据合为一层ARGB8888格式的图像。

4、OUT PFC

OUT OFC是输出像素格式转换器,是将上面混合器种得到的图像转换成目标格式,比如ARGB8888、RGB888、RGB565、ARGB1555或ARGB4444,具体的格式根据需要再输出PFC控制今存其DMA2D_OPFCCR种选择。

F429使用通过LTDC、DMA2D以及存储器,构成一个完整的液晶控制器,LTDC不断刷新液晶屏,DMA2D搬运图像数据、混合及格式转换,RAM存储器作为显存,显存可以使用STM32内部SRAM或者外扩SDRAM/SRAM。

OK,关于液晶屏、LTDC以及DMA2D的内容就学习到这里,下一节开始实测控制显示屏显示图像。
PFC控制今存其DMA2D_OPFCCR种选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作流-flowable

1. 工作流概述 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 …

图解系列 图解直播推拉流流程

文章目录 流程推流流程扩展 拉流流程 文件加密流程 常用开源流媒体服务器为SRS和MTX 流程 涉及到的组件 主播(推流端)观众(播放器)业务服务【持有一些私有Key,如rtmpKey等】流媒体服务器【SRS/MTX】CDN【持有公钥】 …

2023-大数据应用开发-电商可视化结果汇总

电商可视化 任务一:用柱状图展示消费额最高的省份 编写Vue工程代码,根据接口,用柱状图展示2020年消费额最高的5个省份,同时将用于图表展示的数据结构在浏览器的console中进行打印输出,将图表可视化结果和浏览器conso…

JavaWeb_LeadNews_Day11-KafkaStream实现实时计算文章分数

JavaWeb_LeadNews_Day11-KafkaStream实现实时计算文章分数 KafkaStream概述案例-统计单词个数SpringBoot集成 实时计算文章分值来源Gitee KafkaStream 概述 Kafka Stream: 提供了对存储与Kafka内的数据进行流式处理和分析的功能特点: Kafka Stream提供了一个非常简单而轻量的…

使用python爬取网站html代码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言一、Requests是什么?二、使用步骤1.引入库2.创建一个Faker对象:3.设置要访问的目标网站的URL:4.定义HTTP请求头部:6.…

【python手写算法】正则化在线性回归和逻辑回归中的应用

多元线性回归: # codingutf-8 import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3Dif __name__ __main__:X1 [12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,2.19, 1.35, 10.02, 12.93, 5.93, 2.92,…

day 51 |● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 显示的是循环链表&#xff0c;所以需要遍历两遍。 用i%len(nums)保证循环两遍即可。 func nextGreaterElements(nums []int) []int {res : make([]int, len(nums))for i : 0; i < len(nums); i{res[i] -1}stack : make([]int, 0)stack append(stac…

VoxWeekly|The Sandbox 生态周报|20230904

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…

便利连锁店这波操作,赚麻了!

在当今数字化时代&#xff0c;零售业经历了前所未有的革命性变革。消费者期望在购物时获得更多的便捷性、个性化体验和高度智能化的服务。为了满足这些需求&#xff0c;零售商们不得不重新思考他们的经营模式&#xff0c;并将目光投向了新零售模式的未来。 新零售模式不再局限于…

来看看什么是:编译型语言和解释型语言的区别

通过高级语言编写的源码&#xff0c;我们能够轻松理解&#xff0c;但对于计算机来说&#xff0c;它只认识二进制指令&#xff0c;源码就是天书&#xff0c;根本无法识别。源码要想执行&#xff0c;必须先转换成二进制指令。 所谓二进制指令&#xff0c;也就是由 0 和 1 组成的…

非插座式水壶/插座式水壶:SOR/2016-181(水壶法规)和CSA 22.1标准解读!

电水壶作为一种常见的小家电&#xff0c;受到了广大消费者的喜爱。然而&#xff0c;由于安全问题的日益重视&#xff0c;亚马逊加拿大站决定加强对电水壶产品的审核&#xff0c;以确保消费者的安全和权益。 近日&#xff0c;亚马逊平台发布公告&#xff0c;要求在加拿大站销售…

C/C++苹果和虫子 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C苹果和虫子 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C苹果和虫子 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 你买了一箱n个苹果&#xff0c;很不幸…

printf scanf

目录 printf scanf printf 把十的二进制代码放进去了&#xff0c;i对的是二进制代码&#xff0c;指定这一串0101代码以什么样的格式输出。 为什么要输出控制符&#xff0c;因为里面放的是二进制&#xff0c;必须控制输出的格式&#xff0c;指定这一串二进制以什么样的格式输出…

当妈妈们开始精致悦已,母婴品牌该怎么做营销?媒介盒子告诉你

近年来&#xff0c;二孩政策全面放开&#xff0c;母婴行业产品溢价高利润可观&#xff0c;优质品牌层出不穷&#xff0c;那么母婴行业该如何宣传产品呢&#xff1f; 试试软文推广吧&#xff01;软文推广是企业宣传最有效且投入成本最低的宣传方式了。 母婴行业做软文推广可以达…

[uni-app] 海报图片分享方案 -canvas绘制

文章目录 canvas使用记录先看下实际效果图绘制流程及思路1. 绘制头像, 通过drawImage来绘制2.绘制文字部分 具体代码 分享海报图片的方式,以前再RN端采用的是截图方案, 我记得组件好像是 react-native-view-shot 现在要处理uni-app的海报图片分享, 一般也有 html2canvas的相关插…

二维码怎么做调查问卷?二维码统计数据的技巧

小伙伴们一定发现&#xff0c;现在用来收集用户数据时&#xff0c;通过扫码填表的方式在很多场景中都被应用&#xff0c;这种方式有效的提升制作者获取用户数据的速度&#xff0c;而且对于填表者而言也更加的便捷。那么用二维码生成器&#xff08;免费在线二维码生成器-二维码在…

Docker网络功能

基本网络功能 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。使用docker network子命令来管理Docker网络。 外部访问容器可通过端口映射实现&#xff0c;启动容器时使用-p参数指定映射关系。-p可多次使用来绑定多个端口。使用docker port命令查看当前映射的端…

VR全景拍摄发展如何?在各行业应用中有优势吗?

现如今&#xff0c;虚拟现实技术正在以惊人的速度改变着我们的生活&#xff0c;而VR全景拍摄作为一种创新的拍摄方式&#xff0c;可以为大家带来全新的视觉体验。通过VR全景拍摄&#xff0c;可以将平面画面变得更加逼真、更具沉浸感&#xff0c;让人仿佛置身于真实场景之中。 近…

蚂蚁发布金融大模型:两大应用产品支小宝2.0、支小助将在完成备案后

9月8日&#xff0c;在上海举办的外滩大会上&#xff0c;蚂蚁集团正式发布金融大模型。据了解&#xff0c;蚂蚁金融大 模型基于蚂蚁自研基础大模型&#xff0c;针对金融产业深度定制&#xff0c;底层算力集群达到万卡规模。该大 模型聚焦真实的金融场景需求&#xff0c;在“认知…