对于STM32使用FSMC驱动传统8080并口器件方式(TFT)的理解(上)

大容量且引脚数在100脚的STM32芯片都带有FSMC接口。

一般的资料对其的描述是“灵活的静态存储控制器”,我对它的理解其实就是一个外部总线,且是一个可以自己定义时序的总线并且速度不慢,当驱动8080接口的器件是时,由于STM32没有自带硬件8080接口的控制器,如果只是使用GPIO来实现此时序的话,会占用大量的CPU资源,所以这个时候就可以考虑采用FSMC功能。

FSMC支持SRAM,NAND FLASH和NOR FLASH等接口。FSMC将外部设备分为三类,分别是NOR/PSRAM设备,NAND设备和PC卡设备。他们共用地址数据总线等信号,通过不同的片选CS来区分不同的设备。

为什么要把TFT当成SRAM设备来使用呢?

一般的外部SRAM有如下几根线:地址线(A0~A18),数据线(D0~D15),读信号(WE),写信号(OE),片选信号(CS),如果SRAM支持字节控制的话,还有UB和LB信号。

而8080接口的LCD有如下几根线:复位信号(RST),数据线(D0~D15),读信号(RD),写信号(WD),片选信号(CS)和读写功能标志(RS)。

好像上面两种接口都很类似诶…

唯一不同的,就是TFT没有地址信号,但是有RST信号(这两个可以通过软件来控制)。

而TFT的RS信号是用来决定传输数据还是命令的信号,所以在本质上还是可以理解为是一个地址信号。比如我们可以将A0接在RS上,那么当FSMC控制器写地址0的时候,就实现了对RS信号的改变。这样,就将TFT写命令还是写数据的过程区分开了,并且不用软件控制(在我的开发板上是将RS接在A10上的)。

STM32的FSMC支持8/16/32位的数据宽度,因为是8080并口,所以选择16位数据宽度。

FSMC分为四个256M的存储块。一个块分为4个区,一个区管理64M的空间。一个块(256M)通过28根地址线来寻址(HADDR[27:0]),其中0~25用来寻址空间,26~27来寻址四个区。其中26~27是不用干预的。

当1区接的是16位宽的外设时,HADDR[25:1]—FSMC[24:0]

当1区接的是8位宽的外设时,HADDR[25:0]—FSMC[25:0]

但是不论接16位还是8位外设的时候,FSMC_A[0]永远对应外围设备地址A[0]。

驱动TFT时,HADDR的第一位并没有用到,相当于右移了一位。

可以通过设置以下寄存器来改变FSMC时序的参数,由此来实现使FSMC适应更多的外设。

FSMC_BCRx,FSMC_BTRx,FSMC_BWTRx,其中x表示1~4个区的编号。

一般使用FSMC的异步模式A来控制TFT(具体其他模式可以参考STM32参考手册)。

好多啊…明天再写吧。

你可能感兴趣的:(ARM-M3,C/C++)