tag 标签: tftlcd显示

相关博文
  • 热度 16
    2013-1-25 18:15
    3131 次阅读|
    0 个评论
    第十八章 TFTLCD显示实验 上一章我们介绍了 OLED模块及其显示,但是该模块只能显示单色/双色,不能显示彩色,而且尺寸也较小。本章我们将介绍ALIENTEK 2.8寸TFT LCD模块,该模块采用TFTLCD面板,可以显示16位色的真彩图片。在本章中,我们将使用战舰STM32开发板上的LCD接口,来点亮TFTLCD,并实现ASCII字符和彩色的显示等功能,并在串口打印LCD控制器ID,同时在LCD上面显示。本章分为如下几个部分: 18.1 TFTLCD 简介 18.2 硬件设计 18.3 软件设计 18.4 下载验证 18.1 TFTLCDFSMC 简介 本章我们将通过 STM32的FSMC接口来控制TFTLCD的显示,所以本节分为两个部分,分别介绍TFTLCD和FSMC。 18.1.1 TFTLCD 简介 TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。 上一章介绍了 OLED模块,本章,我们给大家介绍ALIENTEK TFTLCD模块,该模块有如下特点: 1 ,2.4’/2.8’/3.5’3种大小的屏幕可选。 2 ,320×240的分辨率(3.5’分辨率为:320*480)。 3 ,16位真彩显示。 4 ,自带触摸屏,可以用来作为控制输入。 本章,我们以 2.8寸的ALIENTEK TFTLCD模块为例介绍,该模块支持65K色显示,显示分辨率为320×240,接口为16位的80并口,自带触摸屏。 该模块的外观图如图 18.1.1.1所示:                        图 18.1.1.1 ALIENTEK 2.8寸TFTLCD外观图        模块原理图如图 18.1.1.2所示:       图 18.1.1.2  ALIENTEK 2.8寸TFTLCD模块原理图 TFTLCD 模块采用2*17的2.54公排针与外部连接,接口定义如图18.1.1.3所示:       图 18.1.1.3  ALIENTEK 2.8寸TFTLCD模块接口图 从图 18.1.1.3可以看出,ALIENTEK TFTLCD模块采用16位的并方式与外部连接,之所以不采用8位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用8位数据线,就会比16位方式慢一倍以上,我们当然希望速度越快越好,所以我们选择16位的接口。图18.1.3还列出了触摸屏芯片的接口,关于触摸屏本章我们不多介绍,后面的章节会有详细的介绍。该模块的80并口有如下一些信号线:        CS :TFTLCD片选信号。        WR :向TFTLCD写入数据。        RD :从TFTLCD读取数据。        D :16位双向数据线。        RST :硬复位TFTLCD。        RS :命令/数据标志(0,读写命令;1,读写数据)。 80 并口在上一节我们已经有详细的介绍了,这里我们就不再介绍,需要说明的是,TFTLCD模块的RST信号线是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个IO口。另外我们还需要一个背光控制线来控制TFTLCD的背光。所以,我们总共需要的IO口数目为21个。这里还需要注意,我们标注的DB1~DB8,DB10~DB17,是相对于LCD控制IC标注的,实际上大家可以把他们就等同于D0~D15,这样理解起来就比较简单一点。 ALIENTEK 提供的2.8寸TFTLCD模块,其驱动芯片有很多种类型,比如有:ILI9320/ILI9325 /ILI9328/ILI9341/SSD1289/LGDP4531/LGDP4535/R61505/ SPFD5408/ RM68021 等(具体的型号,大家可以通过下载本章实验代码,通过串口或者LCD显示查看),这里我们仅以ILI9320控制器为例进行介绍,其他的控制基本都类似,我们就不详细阐述了。 ILI9320 液晶控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565方式,如图18.1.1.4所示:       图 18.1.1.4  16位数据与显存对应关系图 最低 5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜色越深。 接下来,我们介绍一下 ILI9320的几个重要命令,因为ILI9320的命令很多,我们这里不可能一一介绍,有兴趣的大家可以找到ILI9320的datasheet看看。里面对这些命令有详细的介绍。这里我们要介绍的命令列表如表18.1.1.1所示:       表 18.1.1.1 ILI9320常用命令表 R0 ,这个命令,有两个功能,如果对它写,则最低位为OSC,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。这个命令最大的功能就是通过读它可以得到控制器的型号,而我们代码在知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。因为93xx系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。 R3 ,入口模式命令。我们重点关注的是I/D0、I/D1、AM这3个位,因为这3个位控制了屏幕的显示方向。 AM :控制GRAM更新方向。当AM=0的时候,地址以行方向更新。当AM=1的时候,地址以列方向更新。 I/D :当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1, 其关系如图 18.1.1.5所示:              图 18.1.1.5  GRAM显示方向设置图 通过这几个位的设置,我们就可以控制屏幕的显示方向了,这种方法虽然简单,但是不是很通用,比如不同的液晶,可能这里差别就比较大,有的甚至无法通用!比如 9341和9320就完全不通用。 R7 ,显示控制命令。该命令CL位用来控制是8位彩色,还是26万色。为0时26万色,为1时八位色。D1、D0、BASEE这三个位用来控制显示开关与否的。当全部设置为1的时候开启显示,全0是关闭。我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。 R32 ,R33,设置GRAM的行地址和列地址。R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。 R34 ,写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。 R80~R83 ,行列GRAM地址位置设置。这几个命令用于设定你显示区域的大小,我们整个屏的大小为240*320,但是有时候我们只需要在其中的一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据R3的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。 命令部分,我们就为大家介绍到这里,我们接下来看看要如何才能驱动 ALIENTEK TFTLCD模块,这里TFTLCD模块的初始化和我们前面介绍的OLED模块的初始化框图是一样的,只是初始化代码部分不同。接下来我们也是将该模块用来来显示字符和数字。通过以上介绍,我们可以得出TFTLCD显示需要的相关设置步骤如下: 1 )设置STM32 与TFTLCD 模块相连接的IO 。 这一步,先将我们与 TFTLCD模块相连的IO口进行初始化,以便驱动LCD。这里我们用到的是FSMC,FSMC将在18.1.2节向大家详细介绍。 2 )初始化TFTLCD 模块。 其实这里就是上和上面 OLED模块的初始化过程差不多。通过向TFTLCD写入一系列的设置,来启动TFTLCD的显示。为后续显示字符和数字做准备。 3 )通过函数将字符和数字显示到TFTLCD 模块上。 这里就是通过我们设计的程序,将要显示的字符送到 TFTLCD模块就可以了,这些函数将在软件设计部分向大家介绍。通过以上三步,我们就可以使用ALIENTEK TFTLCD模块来显示字符和数字了, 并且可以显示各种颜色的背景。 18.1.2 FSMC 简介 大容量,且引脚数在 100脚以上的STM32F103芯片都带有FSMC接口,ALIENTEK战舰STM32开发板的主芯片为STM32F103ZET6,是带有FSMC接口的。 FSMC ,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡接口,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。FSMC的框图如图18.1.2.1所示:       图 18.1.2.1 FSMC框图        从上图我们可以看出, STM32的FSMC将外部设备分为3类:NOR/PSRAM设备、NAND设备、PC卡设备。他们共用地址数据总线等信号,他们具有不同的CS以区分不同的设备,比如本章我们用到的TFTLCD就是用的FSMC_NE4做片选,其实就是将TFTLCD当成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上面,那么当FSMC控制器写地址0的时候,会使得A0变为0,对TFTLCD来说,就是写命令。而FSMC写地址1的时候,A0将会变为1,对TFTLCD来说,就是写数据了。这样,就把数据和命令区分开了,他们其实就是对应SRAM操作的两个连续地址。当然RS也可以接在其他地址线上,战舰STM32开发板是把RS连接在A10上面的。 STM32 的FSMC支持8/16/32位数据宽度,我们这里用到的LCD是16位宽度的,所以在设置的时候,选择16位宽就OK了。我们再来看看FSMC的外部设备地址映像,STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块,如图18.1.2.2所示:       图 18.1.2.2 FSMC存储块地址映像        从上图可以看出, FSMC总共管理1GB空间,拥有4个存储块(Bank),本章,我们用到的是块1,所以在本章我们仅讨论块1的相关配置,其他块的配置,请参考《STM32参考手册》第19章(324页)的相关介绍。        STM32 的FSMC存储块1(Bank1)被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1的256M字节空间由28根地址线(HADDR )寻址。        这里 HADDR是内部AHB地址总线,其中HADDR 来自外部存储器地址FSMC_A ,而HADDR 对4个区进行寻址。如表18.1.2.1所示:   Bank1 所选区 片选信号 地址范围 HADDR 第1 区 FSMC_NE1 0X6000,0000~63FF,FFFF 00 FSMC_A 第2 区 FSMC_NE2 0X6400,0000~67FF,FFFF 01 第3 区 FSMC_NE3 0X6800,0000~6BFF,FFFF 10 第4 区 FSMC_NE4 0X6C00,0000~6FFF,FFFF 11 表 18.1.2.1 Bank1存储区选择表        表 18.1.2.1中,我们要特别注意HADDR 的对应关系: 当 Bank1接的是16位宽度存储器的时候:HADDR à FSMC 。 当 Bank1接的是8位宽度存储器的时候:HADDR à FSMC 。 不论外部接 8 位/16 位宽设备,FSMC_A 永远接在外部设备地址A 。 这里,TFTLCD使用的是16位数据宽度,所以HADDR 并没有用到,只有HADDR 是有效的,对应关系变为:HADDR à FSMC ,相当于右移了一位,这里请大家特别留意。另外,HADDR 的设置,是不需要我们干预的,比如:当你选择使用Bank1的第三个区,即使用FSMC_NE3来连接外部设备的时候,即对应了HADDR =10,我们要做的就是配置对应第3区的寄存器组,来适应外部设备即可。STM32的FSMC各Bank配置寄存器如表18.1.2.2所示:   内部控制器 存储块 管理的地址范围 支持的设备类型 配置寄存器 NOR FLASH 控制器 Bank1 0X6000,0000~ 0X6FFF,FFFF SRAM/ROM NOR FLASH PSRAM FSMC_BCR1/2/3/4 FSMC_BTR1/2/2/3 FSMC_BWTR1/2/3/4 NAND FLASH /PC CARD 控制器 Bank2 0X7000,0000~ 0X7FFF,FFFF NAND FLASH FSMC_PCR2/3/4 FSMC_SR2/3/4 FSMC_PMEM2/3/4 FSMC_PATT2/3/4 FSMC_PIO4 Bank3 0X8000,0000~ 0X8FFF,FFFF Bank4 0X9000,0000~ 0X9FFF,FFFF PC Card 表 18.1.2.2 FSMC各Bank配置寄存器表        对于 NOR FLASH控制器,主要是通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置(其中x=1~4,对应4个区)。通过这3个寄存器,可以设置FSMC访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。FSMC的NOR FLASH控制器支持同步和异步突发两种访问方式。选用同步突发访问方式时,FSMC将HCLK(系统时钟)分频后,发送给外部存储器作为同步时钟信号FSMC_CLK。此时需要的设置的时间参数有2个:    1,HCLK与FSMC_CLK的分频系数(CLKDIV),可以为2~16分频;    2,同步突发访问中获得第1个数据所需要的等待延迟(DATLAT)。 对于异步突发访问方式, FSMC主要设置3个时间参数:地址建立时间(ADDSET)、数据建立时间(DATAST)和地址保持时间(ADDHLD)。FSMC综合了SRAM/ROM、PSRAM和NOR Flash产品的信号特点,定义了4种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时序参数,如表18.1.2.3所列:   详细内容和源码,见附件!