TFT-LCD屏幕介绍
TFT-LCD英文全程为: Thim Film Transistor Liquid Crustal Display,即薄膜场效应管液晶显示器。这种液晶显示器,每一像素点由集成在其后的薄膜晶体管来驱动,从而可以做到高速度、高亮度、高对比的显示效果。此外,由于每个像素点相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确的控制显示色阶层,所以TFT-LCD的色彩非常真实,TFT-LCD 也被叫做真彩液晶显示器。
LCD驱动芯片
一般的屏幕都会自带驱动芯片,如TFT-LCD的ILI9341,STM32单片机与屏幕驱动芯片进行通信,发送命令或数据到芯片里,芯片再驱动屏幕显示
LCD控制器的作用:驱动TFT-LCD显示器,将接收到的信号转换成TFT-LCD屏幕需要的各种信号,一般集成在TFT-LCD显示模组上。
ILI9341芯片框图
芯片内部的GRAM部分就是存储图像像素点的,32单片机通过往这部分写入像素点数据,则ILI9341就会根据这些数据控制屏幕显示
ILI9341的8080接口
RESX:复位信号线
CSx:片选信号线
D/CX:数据与命令信号线
WRX:写使能信号线
RDX:读使能信号线
DB[17:0]:数据总线,支持8/9/16/18位
写入时序
读取时序
RGB565数据格式
RGB色彩模式是工业界的一种颜色标准,是通过对红、绿、蓝三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
图像数据的像素点由红绿蓝(RGB)三原色构成,按照不同的比例混合形成色彩。ILI9341的数据总线最高支持18位,为了方便传输,一般采用16位,由于人眼对绿色较为敏感,16位数据描述像素点的三原色比例为R:G:B = 5:6:5.
像素点三原色与数据线的对应关系:
数据传输宽度:16位
红色:D11 - D15
绿色:D5 - D10
蓝色:D0 - D4
R = color & 0xF800;
G = color & 0x07E0;
B = color & 0x001F;
举例:
像素点显示纯红色:0b11111 000000 00000 = 0xF800
像素点显示纯绿色:0b00000 111111 00000 = 0x07E0
像素点显示纯蓝色:0b00000 000000 11111 = 0x001F
像素点显示纯黑色:0b00000 000000 00000 = 0x0000
像素点显示纯白色:0b11111 111111 11111 = 0xFFFF
像素点显示黄色:0b11111 111111 00000 = 0xFFE0
FSMC控制器
FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接, STM32F1 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。
大容量,且引脚数目在 100 脚及以上的 STM32F103 芯片都带有 FSMC 接口
从上图可以看出,STM32 的 FSMC 将外部设备分为 3 类:NOR/PSRAM 设备、NAND 设备、PC 卡设备。他们共用地址数据总线等信号,他们具有不同的 CS 以区分不同的设备,比如本次实验用到的 TFTLCD 就是用的 FSMC_NE1 做片选,其实就是将 TFTLCD 当成 SRAM 来控制。
通俗理解就是,FSMC控制器是大容量STM32自带的一个“通信工具”,一般是用来与外部设备进行通信的,可由CPU控制输出与设备通信的时序,而用来控制TFT-LCD是因为LCD驱动芯片的通信引脚与FSMC的引脚差不多匹配,LCD驱动芯片如ILI9341本身也是个SRAM,所以可以用FSMC与之通信,而不用软件模拟通信时序
STM32F1 的 FSMC 存储块 1(Bank1)被分为 4 个区,每个区管理 64M 字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1 的 256M 字节空间由 28 根地址线 (HADDR[27:0])寻址。
这里 HADDR 是内部 AHB 地址总线,其中 HADDR[25:0]来自外部存储器地址 FSMC_A[25:0],而 HADDR[26:27]对 4 个区进行寻址。如下图所示
地址范围共32位,第27、26位的取值区分了不同的片选信号,高四位(31、30、29、28)为6是固定的了,当27、26位为00时,地址就为0x60…,当27、26位为01时,地址就为0x64,依次类推
要特别注意 HADDR[25:0]的对应关系:
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]→ FSMC_A[24:0]。
当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]→ FSMC_A[25:0]。
不论外部接 8 位/16 位宽设备,FSMC_A[0]永远接在外部设备地址 A[0]。 这里,TFT-LCD 使用的是 16 位数据宽度,所以 HADDR[0]并没有用到,只有 HADDR[25:1]是有效的,对应关系变为:HADDR[25:1]→ FSMC_A[24:0],所以在代码中对FSMC_A的[24:0]写入数据时,要左移1位,才能刚好对应HADDR地址
NOR/PSRAM存储区地址:
64MB:FSMC_Bank1_NORSRAM1:0x6000 0000 ~ 0x63FF FFFF
64MB:FSMC_Bank1_NORSRAM2:0x6400 0000 ~ 0x67FF FFFF
64MB:FSMC_Bank1_NORSRAM3:0x6800 0000 ~ 0x6BFF FFFF
64MB:FSMC_Bank1_NORSRAM4:0x6C00 0000 ~ 0x6FFF FFFF
选择BANK1-BORSRAM1 连接 TFT,地址范围为0x6000 0000 ~ 0x63FF FFFF
本次实验选择 FSMC_A0 接LCD的D/CX(命令/数据选择)脚
命令地址 = 0x6000 0000 最低位为0,即A0 = 0,此时表示发送命令
数据地址 = 0x6000 0002 = 0x6000 0000+(1<<(0+1)) 最低位为1才是发送数据,本来是0x6000 0001的,但数据要左移一位,才对应HADDR[25:1]的地址,所以要表示发送数据,则地址就是 0x6000 0002
如果电路设计时选择不同的地址线时,地址要重新计算
eg:选择A10,则数据基地址 = 0x6000 0000+(1<<(10+1)) = 0x6000 0800
TFT-LCD的8080信号线与FSMC的SRAM信号线匹配
1、片选信号:NEx -> CSX
2、写使能:WRX -> NWR
3、读使能:RDX -> NOE
4、数据信号:D[15:0] ->D [15:0]
3、数据命令选择:D/CX -> A[25:0](任意一根地址线)
说明:前四种信号线完全匹配,仅仅8080接口的数据命令选择线与FSMC的地址信号线有区别。为了模拟出8080时序,可以将FSMC的任何一根地址线连接8080接口的D/CX。比如接A0,当FSMC控制器写地址0的时候,那么A0为0,此时对8080接口来说是写命令;当FSMC控制器写地址1的时候,那么A0为1,此时对8080接口来说是写数据,这样就区分开数据与命令了
FSMC读时序
FSMC写时序
|