FSMC CubeMX 配置驱动 TFT LCD

FSMC是STM32的可变静态存储控制器,提供了一个方便的接口来操作外部存储器。文章讨论了如何利用FSMC的SRAM模式匹配8080接口的LCD时序,通过选择地址线作为RS线来解决两者差异,并介绍了配置过程,包括在CubeMX中的设置和注意事项。文章强调了理解地址映射和数据传输的重要性。
摘要由CSDN通过智能技术生成

简介

FSMC(Flexible Static Memory Controller,可变静态存储控制器),相当于是STM32单片机对外部存储器的一个控制接口。

你可以直接简单粗暴地理解为STM32预留的一个对外存储器进行操作的接口,这样的好处就是我们只需要把线接上,而并不用去关心单片机与存储器通信的时序,这样只要我们配置好了对外的是那种类型的存储器,只需要在程序中发送数据,引脚就会自动切换发送我们想要发送的数据。这样使用起来十分地方便。

框图

存储器的映像地址 

 注意这个很重要,因为我们在后面使用 LCD 80接口的几根线是不能完全对上的,必须要做一些小的修改。

为什么可以用来驱动8080接口的LCD?

这里我们来对比一下8080的时序图,和我们STM32 自带的FSMC 在SRAM模式下 A模式的时序图

这是 8080 的写时序图

然后看下 SRAM模式下的A模式的写时序图

 我们可以看到 写时序基本是一致的,但是这里有个问题,我们有发现LCD有RS线而没有地址线;FSMC有地址线但是没有RS线。那么我们要怎么解决这个问题呢?其实很简单,只要选出一根地址线用作与LCD的RS线即可。

这里解释一下为什么可以使用地址线来代替LCD的RS线

打个比方,我使用的是A10地址线作为我的LCD的RS线,此时我想要往LCD当中写数据,写数据就要求我们的RS线是置0的,但是我们总不能直接拉低这个IO口吧。所以我们在0x6000 0800的位置上写数据

因为我们软件上的地址都是要反应到物理硬件上去的,所以说我们往这个地址写内容的话 bit12就会被置1,为什么是bit12而不是bit11呢?因为我么传输的是16位数据,所以需要向右移1位。

如何配置?

首先我们选择配置的外设内存类型是 NOR/PSRAM,这部分的地址我们可以在上图得到:

6000 000h--- 6FFF FFFFh 一共是4 X 64MB 的地址空间

这里我们选择第四个存储块

我使用板子是正点原子F103系列的开发板,这里使用的是16位数据传输

注意:当 Bank1 接的是 16 位宽度存储器的时候: HADDR[25:1]→ FSMC_A [24:0],这就意味单片机内部定义的地址和我们引出IO口物理地址是偏移了一位的,这就需要我们在后面操作的时候,将对应的数据位都整体向右移一位。(我也不是很理解,看了网上的一些说法是为了更加灵活使用而设计的)

这里我使用的正点原子的开发板是 将RS接到了A10,CS接到了NE4

 
 这样也没有关系我们软件上按照他的配置来就行了

这里只提一个重要的点

这里需要注意的是 我们结构体内的LCD_REG 以及 LCD_RAM,他们的数据大小都是两个字节,所以指针在递增的时候是+2,这也就解释了为什么是0x000007FE 而不是 0x000007FF,只要看懂这个基本上就没啥大问题了。

使用CubeMX配置

首先找到FSMC

然后选择第四块区域

 然后开始选择数据位和地址,这个地址你只要超过A10就可以了

 然后打开拓展使能,因为我们这里读写都给他设置一下

这里讲一下上面几个配置信息

第一个 Address setup time   是你读操作时 建立地址所持续的时间

第二个 DATA setup time 是你数据在总线上维持的有效时间

下面的就是写操作了

这里的时间是 (1/72M)*n     要看你液晶芯片的数据手册来确定建立时间,我没看,直接搬的正点原子的时间,然后生成之后,在给一大堆初始化命令就可以啦。

小结

学习的过程中还是挺多坎坷的,有很多概念不理解,一点小错可能就要花费一个下午找bug T.T。不管怎么说,保持进步吧~ _~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值