在调试使用ST7789V主控的TFTLCD时,由于240*240的分辨率较高,为提高刷屏速度,决定使用STM32F103VCT6的FSMC进行控制(注意一般只有100pin以上单片机才会带FSMC功能),通过CubeMX生成初始化程序。
可以把 TFTLCD 当成 SRAM 设备用:首先我们了解下外部 SRAM的连接, 外部 SRAM 的控制一般有:
地址线 (如 A0~A18)
数据线 (如 D0~D15)
写信号 (WE)
读信号 (OE)
选信号 (CS) ;
TFTLCD的信号包括:RS、D0~D15、WR、RD、CS、RST 和 BL 等,其中真正在操作 LCD 的时候需要用到的就只有:RS、D0~D15、WR、 RD 和 CS。
其操作时序和 SRAM的控制完全类似,唯一不同就是 TFTLCD 有 RS 信号,但是没有地址信号。TFTLCD 通过 RS 信号来决定传送的数据是数据还是命令,本质上可以理解为一个地址信号。
我们将RS连接到FSMC的A16上,开始调试,通过示波器观察发现A16对应的引脚并没有输出,通过排查排除硬件电路问题,为什么没有输出呢?
通过资料的查找,发现了一个差异:对于8/16数据所对应的地址偏移是不一样的。
HARRD[25:0]包含外部存储器地址,由于HARRD为字节地址,而存储器按字寻址,所以根据存储器数据的宽度的不同,实际向存储器发送的地址也将有所不同,如下图:
当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]-->FSMC[24:0]。
当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]-->FSMC[25:0]。
我配置的数据位宽是8位,对应HADDR[25:0]-->FSMC[25:0],故A16对应为Bank1的0x60010000。
接下来就可以使用初始化功能快速进行显示控制了,提示速度明显。