×
单片机 > 单片机程序设计 > 详情

stm32 TFTLCD驱动原理(二)

发布时间:2020-06-03 发布时间:
|

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 来说这是写数据。 然后设置好相关的时序,即可对液晶进行读写。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
TQ210天嵌开发板S5PV210 LED闪烁程序C语言代码记录