摘抄自正点原子官方PPT

TFTLCD驱动原理
TFTLCD简介
  TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。
  TFTLCD具有:亮度好、对比度高、层次感强、颜色鲜艳等特点。是目前最主流的LCD显示器。广泛应用于电视、手机、电脑、平板等各种电子产品。

ALINETEK 2.8寸 TFTLCD模块特点
在这里插入图片描述

ALINETEK 2.8寸 TFTLCD模块原理图

在这里插入图片描述

ALINETEK 2.8寸 TFTLCD接口说明(16位80并口)

在这里插入图片描述

ALINETEK 2.8寸 TFTLCD 16位80并口驱动简介
  模块的8080并口读/写的过程为:
  先根据要写入/读取的数据的类型,设置RS为高(数据)/低(命令),然后拉低片选,选中ILI9341,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:
    1.读数据:在RD的上升沿, 读取数据线上的数据(D[15:0]);
    2.写数据:在WR的上升沿,使数据写入到ILI9341里面
在这里插入图片描述

在这里插入图片描述

TFTLCD驱动原理-模块简介

在这里插入图片描述

在这里插入图片描述

TFTLCD驱动原理-驱动流程

在这里插入图片描述

初始化序列是由厂家提供的。

TFTLCD驱动原理-指令简介

RGB565格式说明

模块对外接口采用16位并口,颜色深度为16位,格式为RGB565,关系如下图:

在这里插入图片描述

ILI9341指令格式说明
  ILI9341所有的指令都是8位的(高8位无效),且参数除了读写GRAM的时候是16位,其他操作参数,都是8位的。
  ILI9341的指令很多,这里不一一介绍,仅介绍几个重要的指令,他们是:0XD3,0X36,0X2A,0X2B,0X2C,0X2E等6条指令。

0XD3指令
  该指令为读ID4指令,用于读取LCD控制器的ID 。因此,同一个代码,可以根据ID的不同,执行不同的LCD驱动初始化,以兼容不同的LCD屏幕。
在这里插入图片描述

0X36指令

  I该指令为存储访问控制指令,可以控制ILI9341存储器的读写方向,简单的说,就是在连续写GRAM的时候,可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也是一样)。

在这里插入图片描述

0X2A指令

  该指令是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x坐标)

在这里插入图片描述

0X2B指令

  该指令是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y坐标)

在这里插入图片描述

0X2C指令

  该指令是写GRAM指令,在发送该指令之后,我们便可以往LCD的GRAM里面写入颜色数据了,该指令支持连续写 (地址自动递增)

在这里插入图片描述

0X2E指令

  该指令是读GRAM指令,用于读取ILI9341的显存(GRAM),同0X2C指令,该指令支持连续读 (地址自动递增)

在这里插入图片描述

FSMC简介

FSMC介绍

  FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。FSMC的框图如下图所示:

在这里插入图片描述

FSMC驱动LCD原理
  FSMC驱动外部SRAM时,外部SRAM的控制一般有:地址线(如A0~ A25)、数据线(如D0~D15)、写信号(WE,即WR)、读信号(OE,即RD)、片选信号(CS),如果SRAM支持字节控制,那么还有UB/LB信号。
  而TFTLCD的信号我们在前面介绍过,包括: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也可以接在其他地址线上,战舰V3和精英板开发板都是把RS连接在A10上面,而 探索者STM32F4把RS接在A6上面。
  因此,可以把TFTLCD当成一个SRAM来用,只不过这个SRAM有2个地址,这就是FSMC可以驱动LCD的原理。

NOR PSRAM外设接口
  STM32的FSMC支持8/16/32位数据宽度,我们这里用到的LCD是16位宽度的,所以在设置的时候,选择16位宽就OK了。FSMC的外部设备地址映像,STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块。
在这里插入图片描述

存储块1 操作简介
   STM32的FSMC存储块1(Bank1)用于驱动NOR FLASH/SRAM/PSRAM,被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。
这里HADDR,是内部AHB地址总线,其中,HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。如下表所示:
在这里插入图片描述

STM32的FSMC存储块1 支持的异步突发访问模式包括:模式1、模式A~D等多种时序模型,驱动SRAM时一般使用模式1或者模式 A,这里我们使用模式A来驱动LCD(当SRAM用),其他模式说明详见:STM32中文参考手册-FSMC章节。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

寄存器介绍

   对于NOR FLASH/PSRAM控制器(存储块1),通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置(其中x=1~4,对应4个区)。通过这3个寄存器,可以设置FSMC访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

源码讲解

LCD结构体

在这里插入图片描述

lcddev结构体

在这里插入图片描述

底层接口函数

在这里插入图片描述

LCD初始化函数

在这里插入图片描述

LCD坐标设置函数

在这里插入图片描述

LCD画点函数

在这里插入图片描述

LCD读点函数

在这里插入图片描述

LCD字符显示函数

在这里插入图片描述

在这里插入图片描述