LCD—STM32液晶显示(2.使用FSMC模拟8080时序)

目录

使用STM32的FSMC模拟8080接口时序

FSMC简介

[FSMC NOR/PSRAM中的模式B时序图](#FSMC NOR/PSRAM中的模式B时序图)

用FSMC模拟8080时序

重点:HADDR内部地址与FSMC地址信号线的转换(实现地址对齐)


使用STM32的FSMC模拟8080接口时序

ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟,但这样效率太低,STM32提供了一种特别的控制方法------使用FSMC接口实现8080时序。(如果芯片硬件少于100脚,是无法使用FSMC来控制液晶屏,只能使用SPI的方式来控制)

在前面的《FSMC---扩展外部SRAM》章节中了解到STM32的FSMC外设可以用于控制扩展的外部存储器,而MCU对液晶屏的操作实际上就是把显示数据写入到显存中,与控制存储器非常类似,且8080接口的通讯时序完全可以使用FSMC外设产生,因而非常适合使用FSMC控制液晶屏。

FSMC简介

控制LCD时,适合使用FSMC的NOR\PSRAM模式,它与前面使用FSMC控制SRAM的稍有不同,控制SRAM时使用的是模式A,而控制LCD时使用的是与NOR FLASH一样的模式B,所以我们重点分析框图中NOR FLASH控制信号线部分。

在控制LCD时,使用的是类似异步、地址与数据线独立的NOR FLASH控制方式,所以实际上CLK、NWAIT、NADV引脚并没有使用到。

其中NEx、NOE、NWE都是低电平有效。

STM32具有FSMC_NE1/2/3/4号引脚,不同的引脚对应STM32内部不同的地址区域。 例如,当STM32访问0x68000000-0x6BFFFFFF地址空间时,FSMC_NE3引脚会自动设置为低电平,由于它连接到SRAM的CE#引脚,所以SRAM的片选被使能,而访问0x60000000-0x63FFFFFF地址时,FSMC_NE1会输出低电平。当使用不同的FSMC_NE引脚连接外部存储器时,STM32访问外部存储器的地址不一样,从而达到控制多个外部存储设备的目的。

SRAM同样使用异步通讯,SRAM信号线的信号线如下,与控制LCD的引脚线对照来看

这里复习一下FSMC的地址映射

图中左侧的是Cortex-M3内核的存储空间分配,右侧是STM32 FSMC外设的地址映射。可以看到FSMC的NOR/PSRAM/SRAM/NAND FLASH以及PC卡的地址都在External RAM地址空间内。

正是因为存在这样的地址映射,使得访问FSMC控制的存储器时,就跟访问STM32的片上外设寄存器一样(片上外设的地址映射即图中左侧的"Peripheral"区域)。

FSMC把整个External RAM存储区域分成了4个Bank区域,并分配了地址范围及适用的存储器类型,如NOR及SRAM存储器只能使用Bank1的地址。

在NOR及SRAM区域,每个Bank的内部又分成了4个小块,每个小块有相应的控制引脚用于连接片选信号,如FSMC_NE[4:1]信号线可用于选择BANK1内部的4小块地址区域,当STM32访问0x68000000-0x6BFFFFFF地址空间时,会访问到Bank1的第3小块区域,相应的FSMC_NE3信号线会输出控制信号。

因此当我们板子上如果SRAM已经使用了一个片选引脚NEx,那么NOR FLASH的片选引脚就不能是同一个,不然会导致地址冲突。

FSMC NOR/PSRAM中的模式B时序图

FSMC NOR/PSRAM中的模式B的写时序如下图:

根据STM32对寻址空间的地址映射,地址0x6000 0000 ~0x9FFF FFFF是映射到外部存储器的,而其中的0x6000 0000 ~0x6FFF FFFF则是分配给NOR FLASH、PSRAM这类可直接寻址的器件。

FSMC NOR/PSRAM中的模式B的读时序如下图:

NADV不需要看,只有地址线和数据线复用的时候才会用到,这里我们不用。

当FSMC外设被配置成正常工作,并且外部接了NOR FLASH时,若向0x60000000地址写入数据如0xABCD,FSMC会自动在各信号线上产生相应的电平信号,写入数据。FSMC会控制片选信号NE1选择相应的NOR 芯片,然后使用地址线A[25:0]输出0x60000000,在NWE写使能信号线上发出低电平的写使能信号,而要写入的数据信号0xABCD则从数据线D[15:0]输出,然后数据就被保存到NOR FLASH中了。

用FSMC模拟8080时序

由于图片的问题,注意图中右边得到红圈圈起来的那一半等于左边的一整幅图。

对比FSMC NOR/PSRAM中的模式B时序与ILI9341液晶控制器芯片使用的8080时序可发现,这两个时序是十分相似的(除了FSMC的地址线A和8080的D/CX线,可以说是完全一样) 。

如何使用FSMC的地址线来模拟D/CX?

D/CX为低电平时候表示传输的是命令,高电平表示传输数据。而A[25:0]一共有26根线,我们可以选择出来一根线,并且控制这根线让它在某个时刻,我们想发送命令的时候就表达成低电平,当我们想发送数据的时候就控制这根地址线为高电平。

对于FSMC和8080接口,前四种信号线都是完全一样的,仅仅是FSMC的地址信号线A[25:0]与8080的数据/命令选择线D/CX有区别。而对于D/CX线,它为高电平的时候表示数值,为低电平的时候表示命令,如果能使用FSMC的A地址线根据不同的情况产生对应的电平,那么就完全可以使用FSMC来产生8080接口需要的时序了。

为了模拟出8080时序,我们可以把FSMC的A0地址线(也可以使用其它A1/A2等地址线)与ILI9341芯片8080接口的D/CX信号线连接,那么当A0为高电平时(即D/CX为高电平),数据线D[15:0]的信号会被ILI9341理解为数值,若A0为低电平时(即D/CX为低电平),传输的信号则会被理解为命令。

由于FSMC会自动产生地址信号,当使用FSMC向0x6xxx xxx1、0x6xxx xxx3、0x6xxx xxx5...这些奇数地址写入数据时,地址最低位的值均为1,所以它会控制地址线A0(D/CX)输出高电平,那么这时通过数据线传输的信号会被理解为数值;若向0x6xxx xxx0 、0x6xxx xxx2、0x6xxx xxx4...这些偶数地址写入数据时,地址最低位的值均为0,所以它会控制地址线A0(D/CX)输出低电平,因此这时通过数据线传输的信号会被理解为命令,如下表:

有了这个基础,只要配置好FSMC外设,然后在代码中利用指针变量,向不同的地址单元写入数据,就能够由FSMC模拟出的8080接口向ILI9341写入控制命令或GRAM的数据了。

注意:在实际控制时,以上地址计算方式还不完整,还需要注意HADDR内部地址与FSMC地址信号线的转换。

重点:HADDR内部地址与FSMC地址信号线的转换(实现地址对齐)

我们前面控制SRAM的时候,我们控制某些地址直接访问就可以了,不需要关心地址转换。这是因为SRAM本身具有掩码(通过LB和UB来控制),所以虽然SRAM的数据宽度是16bit,但是却可以以8位的方式访问,也可以以16位的方式访问。

但是NOR FLASH没有SRAM的这种机制,所以如果NOR FLASH是16bit,那就只能以16bit的方式来访问。比如我们的液晶屏有16根数据线,它就相对于一个16位的NOR FLASH,只能使用16位的方式访问。

而我们要注意在STM32内部实际上有一个地址线HADDR是内部AHB地址线。HADDR是字节地址,而液晶屏的NOR FLASH是16位,是两个字节地址。所以访问的时候会有地址对齐的问题。

比如:对于HADDR,访问第0个地址只想访问第0个字节,访问第一个地址只想访问第1个字节;但对于NOR FLASH,我们访问了一个地址就同时访问了两个字节,如访问第1个地址,同时会访问第2、3字节。

所以我们需要对HADDR进行移位(由STM32内部控制,我们不需要管如何移位),会将HADDR的第1根地址线和NOR FLASH的第0根地址线连接,这样就达到了一个移位的目的,左移1位。

这样的话,假如HADDR想要访问1(二进制)地址,外面就会产生一个10(二进制)地址,就相对于访问第2、3字节了。访问2地址,就会访问第4、5字节,也就是每个地址能访问到的字节数乘2,这样就达到了与NOR FLASH地址对齐的目的。

详细可参考数据手册下图

相关推荐
LN花开富贵1 小时前
stm32g431rbt6芯片中VREF+是什么?在电路中怎么设计?
笔记·stm32·单片机·嵌入式硬件·学习
qq21084629531 小时前
【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目
笔记·stm32·嵌入式硬件
CV金科1 小时前
蓝桥杯—STM32G431RBT6按键的多方式使用(包含软件消抖方法精讲)从原理层面到实际应用(一)
stm32·单片机·嵌入式硬件·蓝桥杯
2021.091 小时前
五、CAN总线
嵌入式硬件
luckyluckypolar1 小时前
STM32——输入捕获
stm32·单片机·嵌入式硬件·物联网
hong1616881 小时前
嵌入式硬件基础知识
嵌入式硬件
hai405871 小时前
单片机(Microcontroller)原理及应用
单片机·嵌入式硬件
jun7788952 小时前
嵌入式硬件基础知识
嵌入式硬件
Projectsauron3 小时前
STM32 芯片启动过程
stm32·单片机·芯片启动过程
CDialog3 小时前
arduino ide开发esp32-wroom-32E
单片机·嵌入式硬件