随言:
TFT-LCD的8080并口时序可以与ST的FSMC总线上操作SRAM的时序类似。
故把TFT-LCD挂在SRAM上就能想操作SRAM一样操作TFT-LCD显示了。
主要是STM32CubeIDE的时序图形配置。剩下的就是移植LCD显示厂商的驱动和
寄存器设置,因为这部分设置太多了,自己看手册设置非常繁琐。
重要是要对STM32F4的FSMC 的 SRAM控制原理要了解。
STM32CubeIDE SRAM原理:STM32CubeIDE SRAM_sudaroot的博客-CSDN博客
源码:F407TFT-LCD3.rar-嵌入式文档类资源-CSDN下载
硬件:
STM32F407ZG + 4.3寸TFT-LCD
时序:
TFT-LCD 8080时序图:
SRM32F4 FSMC SRAM时序图:
2020.11.12
其实如果单独看STM32 SRAM 模式A的写入时序图的话,就会发现
ADDSET周期 实际等于 片选NEx拉低后到写信号NWE拉低之间这一段时间。
(DATAST+1)周期 实际等于 写信号NWE拉低到片选NEx拉高到之间这一段时间。
这样的话,如果你不想像下面一样计算时序,就可以用这种万能的方法,
对应到8080时序给的时间去评估ADDSET 和 DATAST 大小,不行就向上加1个周期,
多试几次就可以了。即使可以了,也要长时间测试稳定性。
读时序也适用该理论。
小结:
从上图可以看到8080时序与STM32 FSMC的SRAM控制只有一个引脚功能不同。
8080时序的D\CX引脚功能是用于区分发送过来的是命令还是数据。
而SRAM时序A[25:0]引脚是用于传输数据地址的。
虽然引脚功能不同,但是时序非常类似,所以只要把8080时序的D\CX接到SRAM时序的
地址引脚,这样可以通过控制写入不同的地址 区分写入的是数据还是命令。
时序计算:
STM32CubeIDE SRAM原理:STM32CubeIDE SRAM_sudaroot的博客-CSDN博客
以前 写过STM32F4 的SRAM时序计算来由。在上面链接。
下图是TFT-LCD的时序要求图。
我用的是STM32F407ZG,HCLK = 168MHz,tHCLK = 1s / 168 MHZ = 6ns
t su(Data_NE) + t v(A_NE) = 2 * tHCLK + 25 = 37ns
由于TFT LCD的写时序比读时序快很多,故需要用到扩展模式,即单独配置读和写时序。
读时序
因此,对于读时序必须满足以下等式:
(ADDSET + DATAST) × t HCLK >= max (t RC )
DATAST × t HCLK >= tRDLFM
对于读取访问,DATASET必须验证:
DATAST >= (t AA + t su(Data_NE) + t v(A_NE) )/t HCLK – ADDSET – 4
注意:ADDSET <= 15; DATAST <= 255
计算得: ADDSET = 15; DATAST = 52;
写时序
对于写时序必须满足以下等式:
(ADDSET + (DATAST + 1)) × t HCLK >= max (t WC )
DATAST × t HCLK >= tWRL
注意:在SRAM写入数据的时候,数据建立时间DATAS要加1。详情看F4手册。
计算得: ADDSET = 2; DATAST = 3;
STM32CubeIDE配置:
LCD Register Select - A6:
这是由硬件连接决定的。通过控制地址就能控制LCD写寄存器还是写数据。D\CX拉低表示命令,拉高表示数据。
由于STM32F4对于16bit位宽的地址总线会右移一位,即地址A0是地址的bit1位,跳过bit0位。
所以当写命令的时候地址为0x7E(0111 1110),A6引脚拉低;当写数据的时候地址为0x80(1000 0000),A6引脚拉高。地址由于是16位的,故相邻地址+2。
还需要根据硬件接的选信号或上地址,如硬件接在第4个bank1信号,则或上0x6C000000 | 0x0000007E
Write operation:
是否允许写入操作。FSMC 在存储区域内禁止了写入操作,如果进行写操作将报告 AHB 错误。
Extended mode:
使用扩展模式,即可配置读写时序不同。
生成代码,移植LCD厂商提供的驱动代码。
最后注意:编译器的优化等级选择最高,否则容易出现刷新速度不够,闪屏。
2020.11.12
最近适配了一下ILI9341这个并口显示驱动芯片,用上面的时序发现计算出来无法显示。
最后发现了一个手册的问题。
这个整个写周期的时间twc既然比twrh和twrl相加加了一倍多,这明显不正常嘛。
一般情况下twc = twrh + twrl + (几个纳秒);但是绝对不可能像这个手册中写的大了一倍多。
故,把twc按照 twrh + twrl相加值看待,即twc = 30ns;这样计算出来的时序是正常无误的。
全篇完。
本人是一个嵌入式未入门小白,博客仅仅代表我个人主观见解,记录成长笔记。
笔记是以最简单的方式,只展示最核心的原理。
若有与 大神大大 见解有歧义,我绝对坚信 大神大大 见解是对的,我的是错的。
若无积分等无法下载源码,可加入QQ群657407920下载交流经验。感谢~!