您的位置:首页 > 其它

stm32 TFTLCD驱动原理(二)

2017-08-27 11:05 309 查看
FSMC简介:

   (1) 在大容量, 100
脚以上的 STM32F103 芯片都带有
FSMC 接口,硬石开发板
F1采用的主芯片为 STM32F103ZET6, 是带有
FSMC 接口的。
FSMC(灵活的静态存储器控制器),之所以称为灵活,是由于通过对特殊公的寄存器的设置,
FSMC 能够根据不同个外部存储器列席,发出相应的数据/地址
/控制信号类型以匹配信号的速度,使得
STM32 系列微控制器不仅能够应用各种不同的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同

类型的静态存储器, 满足系统设计对存储容量、产品体积以及成本的综合要求。 



从上图中可以看到, STM32
的 FSMC 将外部设备分为
3 类: NOR/PSRAM、NAND
设备和 PC 卡设备。 它们公用地址数据总线等信号,具有不同的
CS 来区分

不同的设备。我们硬石用到的 TFTLCD 就是用
FSMC_NE4 来作为片选,其实道理很简单,将
TFTLCD 当做
SRAM 来控制。





前四种信号线是完全一样的, 仅在
8080 的数据/命令选择线与
FSMC 的地址信号线有区别。此时, 为了模拟出
8080 时序, 我们把
FSMC
的 A0 地址线(也可以使用其它地址线)连接
8080 的 RS,当
FSMC 控制器写地址
0 的时候,那么
A0 变为 0, 对
TFTLCD 来说,这是写命令。而
FSMC 写
1 的时

候, A0 变为
1, 对 TFTLCD
来说这是写数据。 举个例子,当向地址为 0x6xxx xxx1、0x6xxx xxx3
的奇数地址写入数据时,地址线 A0(RS)为高电平,这个数据被理解为

数值;若向 0x6xxx xxx0、
0x6xxx xxx2 这些偶数地址写入数据时,地址线
A0(RS)为低电平,这个数据被理解为命令。 这样,就可以区分开数据和命令了。
STM32 支持 8/16/32
位数据宽度,我们 TFTLCD
是 16 位数据宽度,所以在设置的时候,选择
16 位宽就好。下面是
STM32FSMC 的外部设备地址映像。

(2)把外部存储器划分为固定大小为
256M 字节的四个存储块。



FSMC 管理总共管理
1GB 空间, FSMC
对外部设备的地址映像从 0x6000 0000
开始,到 0x9FFF FFFF
结束,共有四个块。

(3)存储块 1(
Bank1)被分为
4 个区,每个区管理 64MB
字节的空间,每个区都有独立的寄存器对所连接的存储器进行配置,我们可以通过选择
HADDR[27:26]来

确定当前使用的是哪个 64M 的分地址块。这里的
HADDR 是需要转移到外部设备的内部
AHB 地址线, HADDR
是字节地址,而存储器访问不都是按字节访问,因此接到存储器的地址线根据存储器的数据宽度有所不同。 如果数据宽度为
8 位, 则 HADDR[25:0]与
FSMC_A[25:0]相连;如果数据宽度为
16 位,那么
HADDR[25:1]与
FSMC_A[24:0]相连,
HADDR[0]不接 。需要注意的是,
HADDR[27:26]的设置, 我们是不用干预的,例如当我们选择Bank
的第 2 区,对应的就是
FSMC_NE2 连接外部设备,也就是对应了ADDR[27:26]=01,连接好后,我们需要做的就是配置第
2 区的寄存器组,来适应外部设备。



这里在我的理解就是HADDR是STM32内部地址总线,当设置为FSMC时,时间上这些地址总线就可以通过FSMC的引脚显示出来变化了,这个时候这些定义的内部寄存器区域以实际的外设地址显现出来。

(4)读写

涉及到一个很重要的点,就是时序。 对于
NOR FLASH 控制器,主要是通过
FSMC_BCRx、
FSMC_BTRx 和FSMC_BWTTx
寄存器设置( 其中 x=1~4, 对应
4 个区)。 通过这
3 个寄存器,可以设置 FSMC
访问外部存储器的时序参数, 也就是说在硬件允许的范围内,可以自己对读写速度进行配置。
FSMC 的 NOR FLASH
控制器分为异步模式和同步突发模式,异步模式分为普通模式 1
和 2, 还有在两个普通模式下的
4 种扩展模式( A、
B、 C、
D)。 FSMC


要设置了 3 个时间参数:地址建立时间(
ADDSET)、 数据建立时间(
DATAST)和地址保存时间( ADDHLD)。当我们选用异步模式的不同时序模型时,须设置不同

的时序参数。本章,我们使用异步模式
A 方法来控制
TFTLCD,模式
A 的读操作时序如图26-6。模式
A 支持独立的读写时序控制,有了这个机制,那么我们只要初始化的

时候配置好,之后就不用配置了。

本来 FSMC
是用来控制一些存储器的,在这里,我们利用它和 ILI9488
的相似性来控制液晶, 只是个 RS
接口的不同, 但是解决的方法是: 我们把
FSMC 的
A0 地址线(也可以使用其它地址线)连接
8080 的
RS,当
FSMC 控制器写地址
0的时候,那么
A0 变为
0, 对
TFTLCD 来说,这是写命令。而
FSMC 写
1 的时候,
A0 变为
1, 对
TFTLCD 来说这是写数据。
然后设置好相关的时序,即可对液晶进行读写。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: