当前位置:首页 » 《随便一记》 » 正文

1.25 Cubemx_STM32F429\H7LCD_oDuanYanGuHong的博客

14 人参与  2021年11月29日 10:23  分类 : 《随便一记》  评论

点击全文阅读


LCD

  • 1、LCD介绍
    • 1.1 TFT(MCU)_LCD、RGB_LCD
    • 1.2 接口
      • 1.2.1 接口种类
      • 1.2.2 8080 接口
      • 1.2.3 RGB接口
    • 1.3 MCU_LCD
      • 1.3.1 原理图及工作原理
      • 1.3.2 FMC-SRAM
    • 1.4 RGB_LCD
      • 1.4.1 基础知识
      • 1.4.2 原理图及工作原理

1、LCD介绍

1.1 TFT(MCU)_LCD、RGB_LCD

在这里插入图片描述

MCU-LCD屏它与RGB-LCD屏主要区别在于显存的位置:


  RGB-LCD的显存是由系统内存充当的,因此其大小只受限于系统内存的大小,这样RGB-LCD可以做出较大尺寸,象现在4.3"只能算入门级,而MID中7",10"的屏都开始大量使用.
   MCU-LCD的设计之初只要考虑单片机的内存较小,因此都是把显存内置在LCD模块内部.然后软件通过专门显示命令来更新显存,因此MCU屏往往不能做得很大.同时显示更新速度也比RGB-LCD慢.

OLED:8080接口、I2C、SPI
MCU_LCD:8080接口(一般情况).
RGL_LCD:RGB接口
颜色格式有:RGB888、RGB565、RGB666

MCU-LCD屏它与RGB-LCD屏量示数据传输模式也有差别:
   RGB屏只需显存组织好数据。启动显示后。LCD-DMA会自动把显存通过RGB接口送到LCM。
  MCU屏则需要发送画点的命令来修改MCU内部RAM。(即不能直接MCU屏RAM)所以RGB显示速度明显比MCU快,而且播放视频方面,MCU-LCD也比较慢.


MUC屏优缺点:
  优点是:控制简单方便,无需时钟和同步信号,无需MCU提供显存,可省掉SDRAM或SRAM。
  缺点是:耗费GRAM,对驱动芯片有要求,所以难以做到大屏(QVGA以上),因为带了驱动芯片,会比RGB接口屏幕贵。

RGB_LCD优缺点:
  优点是:屏幕便宜。4.3寸、7寸、10.1寸、10.4寸多是这种接口。
  缺点是:需要MCU带显存,一般需要外挂SRAM或SDRAM。

1.2 接口

1.2.1 接口种类

一般有4 种接口:包括RGB接口、 6800、8080 两种并行接口方式、4 线 SPI 接口方式以及 IIC 接口方式(2线)。

1.2.2 8080 接口

举例:OLED模块
ALIENTEK OLED 模块的 8080 接口方式需要如下一些信号线:

CS:OLED 片选信号。
WR:向 OLED 写入数据。
RD:从 OLED 读取数据。
D[7:0]:8 位双向数据线。
RST(RES):硬复位 OLED。
DC:命令/数据标志(0,读写命令;1,读写数据)。

  模块的 8080 并口读/写的过程为:先根据要写入/读取的数据的类型,设置 DC 为高(数据)/低(命令),然后拉低片选,选中 SSD1306,接着我们根据是读数据,还是要写数据置 RD/WR为低,然后:
  在 RD 的上升沿, 使数据锁存到数据线(D[7:0])上;
  在 WR 的上升沿,使数据写入到 SSD1306 里面
SSD1306 的 8080 并口写时序图如图 16.1.3 所示:
在这里插入图片描述

1.2.3 RGB接口

信号线如下:

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

1.3 MCU_LCD

1.3.1 原理图及工作原理

在这里插入图片描述
该模块的 80 并口(全称是8080并行接口)有如下一些信号线:
CS:TFTLCD 片选信号。
WR:向 TFTLCD 写入数据。
RD:从 TFTLCD 读取数据。
D[15:0]:16 位双向数据线。
RST:硬复位 TFTLCD。
RS:命令/数据标志(0,读写命令;1,读写数据)。

  ALIENTEK提供 2.8/3.5/4.3/7 寸等 4种不同尺寸和分辨率的TFTLCD 模块,其驱动芯片为:

  ILI9341/NT35310/NT35510/SSD1963 等(具体的型号,大家可以通过下载本章实验代码,通过串口或者 LCD 显示查看),这里我们仅以 ILI9341 控制器为例进行介绍,其他的控制基本都类似,我们就不详细阐述了。

  ILI9341 液晶控制器自带显存,其显存总大小为 172800(24032018/8),即 18 位模式(26万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图 18.1.1.4 所示:
在这里插入图片描述
  从图中可以看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0和 D12 没有用到,实际上在我们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。
  接下来,我们介绍一下 ILI9341 的几个重要命令,因为 ILI9341 的命令很多,我们这里就不全部介绍了,有兴趣的大家可以找到 ILI9341 的 datasheet 看看。里面对这些命令有详细的介绍。我们将介绍:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。
  首先来看指令:0XD3,这个是读 ID4 指令,用于读取 LCD 控制器的 ID,该指令如表 18.1.1.1所示:
在这里插入图片描述
  从上表可以看出,0XD3 指令后面跟了 4 个参数,最后 2 个参数,读出来是 0X93 和 0X41,刚好是我们控制器 ILI9341 的数字部分,从而,通过该指令,即可判别所用的 LCD 驱动器是什么型号,这样,我们的代码,就可以根据控制器的型号去执行对应驱动 IC 的初始化代码,从而兼容不同驱动 IC 的屏,使得一个代码支持多款 LCD。


接下来看指令:0X36,这是存储访问控制指令,可以控制 ILI9341 存储器的读写方向,简单的说,就是在连续写 GRAM 的时候,可以控制 GRAM 指针的增长方向,从而控制显示方式(读 GRAM 也是一样)。该指令如表 18.1.1.2 所示:
在这里插入图片描述
从上表可以看出,0X36 指令后面,紧跟一个参数,这里我们主要关注:MY、MX、MV这三个位,通过这三个位的设置,我们可以控制整个 ILI9341 的全部扫描方向,如表 18.1.1.3所示:

MYMXMVLCD 扫描方向(GRAM 自增方式)
000从左到右,从上到下
100从左到右,从下到上
010从右到左,从上到下
110从右到左,从下到上
001从上到下,从左到右
011从上到下,从右到左
101从下到上,从左到右
111从下到上,从右到左

  这样,我们在利用 ILI9341 显示内容的时候,就有很大灵活性了,比如显示 BMP 图片,BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角,如果设置 LCD 扫描方向为从左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往 LCD 填充颜色数据即可,这样可以大大提高显示速度。

  接下来看指令:0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x 坐标),该指令如表 18.1.1.4 所示:
在这里插入图片描述
  在默认扫描方式时,该指令用于设置 x 坐标,该指令带有 4 个参数,实际上是 2 个坐标值:SC 和 EC,即列地址的起始值和结束值,SC 必须小于等于 EC,且 0≤SC/EC≤239。一般在设置 x 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SC 即可,因为如果 EC 没有变化,我们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。
  与 0X2A 指令类似,指令:0X2B,是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y 坐标)。该指令如表 18.1.1.5 所示:
在这里插入图片描述
  在默认扫描方式时,该指令用于设置 y 坐标,该指令带有 4 个参数,实际上是 2 个坐标值:SP 和 EP,即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤319。一般在设置y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。
  接下来看指令:0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如表 18.1.1.6 所示:
在这里插入图片描述
  从上表可知,在收到指令 0X2C 之后,数据有效位宽变为 16 位,我们可以连续写入 LCD GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过 SC,SP 设置)后,每写入一个颜色值,GRAM 地址将会自动自增 1(SC++),如果碰到 EC,则回到 SC,同时 SP++,一直到坐标:EC,EP 结束,其间无需再次设置的坐标,从而大大提高写入速度。

  最后,来看看指令:0X2E,该指令是读 GRAM 指令,用于读取 ILI9341 的显存(GRAM),该指令在 ILI9341 的数据手册上面的描述是有误的,真实的输出情况如表 18.1.1.7 所示:
在这里插入图片描述
  该指令用于读取 GRAM,如表 18.1.1.7 所示,ILI9341 在收到该指令后,第一次输出的是dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC,SP 开始),输出规律为:每个颜色分量占 8 个位,一次输出 2 个颜色分量。比如:第一次输出是 R1G1,随后的规律为:B1R2→G2B2→R3G3→B3R4→G4B4→R5G5… 以此类推。如果我们只需要读取一个点的颜色值,那么只需要接收到参数 3 即可,如果要连续读取(利用 GRAM
地址自增,方法同上),那么就按照上述规律去接收颜色数据。
在这里插入图片描述

1.3.2 FMC-SRAM

在这里插入图片描述
  这里我们介绍下为什么可以把 TFTLCD 当成 SRAM 设备用:首先我们了解下外部 SRAM的连接,外部 SRAM 的控制一般有:地址线(如 A0~A18)、数据线(如 D0~D15)、写信号(WE)、读信号(OE)、片选信号(CS),如果 SRAM 支持字节控制,那么还有 UB/LB 信号。而 TFTLCD的信号我们在 18.1.1 节有介绍,包括:RS、D0~D15、WR、RD、CS、RST 和 BL 等,其中真正在操作 LCD 的时候需要用到的就只有:RS、D0~D15、WR、RD 和 CS。其操作时序和 SRAM的控制完全类似,唯一不同就是 TFTLCD 有 RS 信号,但是没有地址信号。

  TFTLCD 通过 RS 信号来决定传送的数据是数据还是命令,本质上可以理解为一个地址信号,比如我们把 RS 接在 A0 上面,那么当 FMC 控制器写地址 0 的时候,会使得 A0 变为 0, 对 TFTLCD 来说,就是写命令。而 FMC 写地址 1 的时候,A0 将会变为 1,对 TFTLCD 来说,就是写数据了。这样,就把数据和命令区分开了,他们其实就是对应 SRAM 操作的两个连续地址。当然 RS 也可以接在其他地址线上,阿波罗 STM32H743 开发板是把 RS 连接在 A18 上面的。

  STM32H743 的 FMC 支持 8/16/32 位数据宽度,我们这里用到的 LCD 是 16 位宽度的,所以在设置的时候,选择 16 位宽就 OK 了。我们再来看看 FMC 的外部设备地址映像,STM32H743的 FMC 将外部存储器划分为 6 个固定大小为 256M 字节的存储区域,如图 18.1.2.2 所示:
在这里插入图片描述

1.4 RGB_LCD

1.4.1 基础知识

1、像素点
于一个“小灯“,不管是液晶屏,还是手机,平板,RGBLCD屏幕他都是有由一个个的彩色小灯构成的。彩色点阵屏每个像素点有三个小灯,红色、绿色和蓝色,也叫做RGB。RGB就是光的三原色。通过调整RGB三种颜色的比例,就可以实现姹紫千红的世界。

2、分辨率
要想显示文字,图片,视频等等就需要很多个像素点,分辨率说的就是像素点的个数,1080P、720P、2K、4K,8K。1080P=19201080,表示一行有1920个像素点,一列有1080个。显示器有尺寸!24村,27村、55寸。尺寸不变的情况下,分辨率越高,显示效果越精细。4K=38402160相当于4个1080P

正点原子的RGB屏幕有:4.3寸480272,800480,7寸的800480和1024600,10.1寸的1280*800。

Iphone4屏幕尺寸是3.5寸,960*640分辨率,PPI=327.

3、像素格式
如何将RGB三种颜色进行量化,每种颜色用8bit表示,RGB就需要888共24bit。可以描述出2^24=中颜色16777216=1677万种颜色。现在流行10bit,HDR10,支持HDR效果的10bit面板,RGB10 10 10。
在RGB888的基础上在加上8bit的ALPHA通道,也就是透明通道,ARGB8888=32位。

4、LCD屏幕接口
RGB格式的屏幕,一般叫做RGB接口屏。
屏幕接口有:MIPI、LVDS、MCU、RGB接口。
正点原子屏幕ID:使用ID可以识别出不同的屏幕,在RGBLCD屏幕上对R7,G7,B7焊接上拉或下拉电阻实现不同的ID。
正点原子的ALPHA地板RGB屏幕接口用了3个3157模拟开关。原因是防止LCD屏幕上的ID电阻影响到6ULL的启动。

5、LCD时间参数和LCD时序
在这里插入图片描述
水平:

HSYNC :行同步信号,当此信号有效的话就表示开始显示新的一行数据,查阅所使用的
LCD 数据手册可以知道此信号是低电平有效还是高电平有效,假设此时是低电平有效。
HSPW : 有些地方也叫做 thp ,是 HSYNC 信号宽度,也就是 HSYNC 信号持续时间。 HSYNC
信号不是一个脉冲,而是需要持续一段时间才是有效的,单位为 CLK 。

HBP : 有些地方叫做 thb ,前面已经讲过了,术语叫做行同步信号后肩,单位是 CLK 。
HOZVAL :有些地方叫做 thd ,显示一行数据所需的时间,假如屏幕分辨率为 1024*600 ,
那么 HOZVAL 就是 1024 ,单位为 CLK 。

HFP :有些地方叫做 thf ,前面已经讲过了,术语叫做行同步信号前肩,单位是 CLK 。
当 HSYNC 信号发出以后,需要等待 HSPW+HBP 个 CLK 时间才会接收到真正有效的像素
数据。当显示完一行数据以后需要等待 HFP 个 CLK 时间才能发出下一个 HSYNC 信号,所以
显示一行所需要的时间就是: HSPW + HBP + HOZVAL + HFP
在这里插入图片描述



垂直:一帧图像就是由很多个行组成的,RGB LCD 的帧显示时序如图 24.1.1.7 所示:

VSYNC :帧同步信号,当此信号有效的话就表示开始显示新的一帧数据,查阅所使用的
LCD 数据手册可以知道此信号是低电平有效还是高电平有效,假设此时是低电平有效。

VSPW : 些地方也叫做 tvp ,是 VSYNC 信号宽度,也就是 VSYNC 信号持续时间,单位为
1 行的时间。

VBP : 有些地方叫做 tvb ,前面已经讲过了,术语叫做帧同步信号后肩,单位为 1 行的时
间。

LINE : 有些地方叫做 tvd ,显示一帧有效数据所需的时间,假如屏幕分辨率为 1024*600 ,
那么 LINE 就是 600 行的时间。

VFP : 有些地方叫做 tvf ,前面已经讲过了,术语叫做帧同步信号前肩,单位为 1 行的时间。
显示一帧所需要的时间就是: VSPW+VBP+LINE+VFP 个行时间,最终的计算公式:
T = (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP)
因此我们在配置一款 RGB LCD 的时候需要知道这几个参数: HOZVAL( 屏幕有效宽度 ) 、
LINE( 屏幕有效高度 ) 、 HBP 、 HSPW 、 HFP 、 VSPW 、 VBP 和 VFP 。 ALIENTEK 三款 RGB LCD
屏幕的参数如表 24.1.1.3 所示:
在这里插入图片描述

1.4.2 原理图及工作原理

RGBLCD 的信号线如表 20.1.1.1 所示:

在这里插入图片描述
在这里插入图片描述

  一般的 RGB 屏都有如表 20.1.1.1 所示的信号线,有 24 根颜色数据线(RGB 各站 8 根,即RGB888 格式),这样可以表示最多 1600W 色,DE、VS、HS 和 DCLK,用于控制数据传输。

  必须通过用户程序配置 LCD-TFT 控制器引脚。未使用的引脚可用于其他功能。

  对于高达 24 位 (RGB888) 的 LTDC 输出,如果使用低于 8bpp 的像素深度将 RGB565 或RGB666 输出到 16 位或 18 位显示器,则 RGB 显示数据线必须连接到 LCD-TFT 控制器RGB 数据线的 MSB。例如,当 LCD-TFT 控制器与 RGB565 16 位显示器相连时,LCD 显示器的 R[4:0]、G[5:0] 和 B[4:0] 数据线引脚必须连接至 LCD-TFT 控制器的 LCD_R[7:3]、LCD_G[7:2] 和 LCD_B[7:3]。


点击全文阅读


本文链接:http://zhangshiyu.com/post/31385.html

指令  数据  信号  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1