STM32之HAL开发——FSMC控制带控制器LCD(8080时序)

2024-04-24 02:44

本文主要是介绍STM32之HAL开发——FSMC控制带控制器LCD(8080时序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32FSMC模拟8080接口时序

ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟,但这样效率太低,STM32提供了一种特别的控制方法——使用FSMC接口实现8080时序。
由于FSMC外设可以用于控制扩展的外部存储器,而MCU对液晶屏的操作实际上就是把显示数据写入到显存中,与控制存储器非常类似,且8080接口的通讯时序完全可以使用FSMC外设产生,因而非常适合使用FSMC控制液晶屏。
在这里插入图片描述
图 1 FSMC结构图

通讯引脚

在本次示例中,控制LCD时,是使用FSMC的NOR/PSRAM模式的,而且控制LCD时使用的是NOR FLASH类型的模式B,所以我们重点分析框图中NOR FLASH控制信号线部分,控制NOR FLASH主要使用到下表的信号线:

FSMC信号名称

信号方向

功能

CLK

输出

时钟(同步突发模式使用)

A[25:0]

输出

地址总线

D[15:0]

输入/输出

双向数据总线

NE[x]

输出

片选,x = 1…4

NOE

输出

输出使能

NWE

输出

写使能

NWAIT

输入

NOR闪存要求FSMC等待的信号

NADV

输出

地址、数据线复用时作锁存信号

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

其中比较特殊的FSMC_NE是用于控制存储器芯片的片选控制信号线,STM32具有FSMC_NE1/2/3/4号引脚,不同的引脚对应STM32内部不同的地址区域。例如,当STM32访问0x68000000-0x6BFFFFFF地址空间时,FSMC_NE3引脚会自动设置为低电平,由于它一般连接到外部存储器的片选引脚且低电平有效,所以外部存储器的片选被使能,而访问0x60000000-0x63FFFFFF地址时,FSMC_NE1会输出低电平。当使用不同的FSMC_NE引脚连接外部存储器时,STM32访问外部存储的地址不一样,从而达到控制多个外部存储器芯片的目的。各引脚对应的地址会在后面“FSMC的地址映射”小节讲解。

存储器控制器

上面不同类型的引脚是连接到FSMC内部对应的存储控制器中的。NOR/PSRAM/SRAM设备使用相同的控制器,NAND/PC卡设备使用相同的控制器,不同的控制器有专用的寄存器用于配置其工作模式。
控制NOR FLASH的有FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片选时序寄存器以及FSMC_BWTR1/2/3/4写时序寄存器。每种寄存器都有4个,分别对应于4个不同的存储区域,各种寄存器介绍如下:

  • FSMC_BCR控制寄存器可配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。
  • FMC_BTR时序寄存器用于配置SRAM访问时的各种时间延迟,如数据保持时间、地址保持时间等。
  • FMC_BWTR写时序寄存器与FMC_BTR寄存器控制的参数类似,它专门用于控制写时序的时间参数。

时钟控制逻辑

FSMC外设挂载在AHB总线上,时钟信号来自于HCLK(默认72MHz),控制器的同步时钟输出就是由它分频得到。例如,NOR控制器的FSMC_CLK引脚输出的时钟,它可用于与同步类型的NOR FLASH芯片进行同步通讯,它的时钟频率可通过FSMC_BTR寄存器的CLKDIV位配置,可以配置为HCLK的1/2或1/3,也就是说,若它与同步类型的NOR FLASH通讯时,同步时钟最高频率为36MHz。本示例中的NOR FLASH为异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。

FSMC的地址映射

FSMC连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据,这种地址访问与I2C EEPROM、SPI FLASH的不一样,后两种方式都需要控制I2C或SPI总线给存储器发送地址,然后获取数据;在程序里,这个地址和数据都需要分开 使用不同的变量存储,并且访问时还需要使用代码控制发送读写命令。而使用FSMC外接存储器时,其存储单元是映射到STM3 2的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外 设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。

#define Bank1_SRAM3_ADDR    ((uint32_t)(0x68000000))
/*写/读 16位数据*/
*( uint16_t*) (Bank1_SRAM3_ADDR+10 ) = (uint16_t)0xBBBB;
printf("指针访问SRAM,写入数据0xBBBB \r\n");
temp =  *( uint16_t*) (Bank1_SRAM3_ADDR+10 );
printf("读取数据:0x%X \r\n",temp);

以上代码实际上就是标准的C语言对特定地址的指针式访问,只是由于该地址被STM32映射到FSMC外设,所以访问这些地址时,FSMC会自动输出地址、数据等访问时序。

FSMC控制异步NOR FLASH的时序

FSMC外设支持输出多种不同的时序以便于控制不同的存储器,它具有ABCD四种模式,下面我们仅针对控制异步NOR FLASH使用的模式B进行讲解,见下图。
在这里插入图片描述
图 2 FSMC读NOR FLASH的时序图(模式B)

在这里插入图片描述
图 3 FSMC写NOR FLASH的时序图(模式B)

当内核发出访问某个指向外部存储器地址时,FSMC外设会根据配置控制信号线产生时序访问存储器,上图中的是访问外部异步NOR FLASH(模式B)时FSMC外设的读写时序。

以读时序为例,该图表示一个存储器操作周期由地址建立周期(ADDSET)、数据建立周期(DATAST)以及2个HCLK周期组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给FSMC,FSMC把它交给内核。

写时序类似,区别是它的一个存储器操作周期仅由地址建立周期(ADDSET)和数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着FSMC把数据通过数据线传输到存储器中。

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

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

用FSMC模拟8080时序

在这里插入图片描述
图 4 FSMC 模式B时序与8080时序对比(写过程)

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

FSMC-NOR信号线

功能

8080信号线

功能

NEx

片选信号

CSX

片选信号

NWR

写使能

WRX

写使能

NOE

读使能

RDX

读使能

D[15:0]

数据信号

D[15:0]

数据信号

A[25:0]

地址信号

D/CX

数据/命令选择

对于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)输出低电平,因此这时通过数据线传输的信号会被理解为命令,如下表。

地址

地址的二进制值(仅列出低四位)

A0(D/CX)的电平

控制ILI9341时的意义

0x6xxx xxx1

000 1

1 高电平

D数值

0x6xxx xxx3

001 1

1高电平

D数值

0x6xxx xxx5

010 1

1高电平

D数值

0x6xxx xxx0

000 0

0低电平

C命令

0x6xxx xxx2

001 0

0低电平

C命令

0x6xxx xxx4

010 0

0低电平

C命令

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

注意:在实际控制时,以上地址计算方式还不完整,还需要注意HADDR内部地址与FSMC地址信号线的转换,关于这部分内容在代码讲解时再详细举例说明。

这篇关于STM32之HAL开发——FSMC控制带控制器LCD(8080时序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930561

相关文章

IOS开发基础Object-C(05)—OC变量的作用域、self

一、变量的作用域 方法的声明和实现,都必须以+ 或者 - 开头, (1). +表示类方法(静态方法) (2).-表示对象方法(动态方法) 在.h中声明的所有方法都是public类型(通过Category可以实现private) 1.@public,@protected,@private @public 全局都可以访问 @protected 只能在类内部和子类中访问 @priva

IOS开发基础Object-C( 04)—构造方法和description方法

在上一篇博客中,我们简单介绍了一下点语法和self,相信大家对点语法以及self有了一点的了解,点语法的本质就是调用get方法和set方法。那么今天我们再来介绍一下构造方法和description。 注:现在我也是在学习阶段,有错误请大家指出,多多包涵,本博客仅属于读书笔记一类。大家也可以关注我的微博@我叫崔某某,让我们共同交流,共同学习 一、构造方法 1、依照惯例我们在Stude

IOS开发基础Object-C(03)—点语法

今天我们来介绍一下OC中的点语法,官方为了让更多的程序员更加容易的学习开发OC语言,所以增加了一个点语法。在上一篇博客中,我们详细介绍了在OC中类的创建。今天我们就来简单的复习一下: 一、创建一个学生类 1.在Student.h文件中声明 #import< Fountation/Fountation.h>@interface Student :NSObject{int _age;//

IOS开发基础Object-C(02 )—第一个OC类

一、创建一个类 1、创建一个新文件,选择OS X下Cocoa(IOS下Cocoa Touch)中Objective-C class模板 2、输入类名,如:Student。在Subclass of(子类属于)选项中,选择NSObject。 可以这么说,几乎所有的类都继承与NSObject。 官网关于Cocoa框架有如下介绍: Cocoa supplies two root classes:

IOS开发基础Object-C(01)— OC概述及比较

一、OC概述 1、OC是一种通用的面向对象的编程语言,它扩展了ANSI C编程语言,将SmallTalk式的消息传递机制加入到ANSI C中。它是苹果的OS X(X表示第十代)和IOS操作系统,及其相关的API、Cocoa和Cocoa Touch的主要编程语言。 2、OC主要做UI界面,C语言、C++ 可用于图形处理。 3、OC基于C语言,在C语言的基础上增加了一层最小面对对象语法,可以完全

Android开发学习系列(一)——Android按钮圆角美化

今天给大家介绍一下Android Shape Drawable 美化圆角图形,废话不多说,直接上代码 1、首先你得有一个button,在Android xml中直接创建一个控件 <Buttonandroid:id="@+id/button1"android:layout_width="fill_parent"android:layout_height="wrap_content"andr

个人写的第三方报警设备SDK接入规范书,可供奋斗在开发第一线的同志们参考.

XXX智能安防监控平台设备接入规范要求 2013年X月X日 定稿人:Patrol Eagle 1前言 1.1 编写目的 为了保证XX省XX智能安防平台系统的实施与安防设备接入数量的详细评估,保证该系统的稳定性和设备接入的统一性而建立的接入规范。 1.2 范围 适用于XX省各XX相关负责人培训。 2.规范内容 2.1 对接设备分类及描述 报警主机:报警主机是用物理方法或电子

内网安全-代理Socks协议路由不出网后渗透通讯CS-MSF控制上线简单总结

我这里只记录原理,具体操作看文章后半段或者这篇文章内网渗透—代理Socks协议、路由不出网、后渗透通讯、CS-MSF控制上线_内网渗透 代理-CSDN博客 注意这里是解决后渗透通讯问题,之后怎么提权,控制后面再说 背景 只有win7有网,其他没网 网络情况:win7有其他都没有 巧合地是:几台设备入栈规则不严格 代理协议: SOCKS4/5 代理软件: Sock

【正版系统】知识付费系统搭建,系统模板开发完善功能强大,支持快速部署上线

在数字化时代,知识付费已成为一种趋势,为内容创作者和求知者搭建了一个高效的交流平台。今天,我要为大家介绍一款功能强大的知识付费系统。 知识付费系统模板是我们一款经过精心开发、完善的系统,旨在为用户提供一站式的知识付费解决方案。该系统具备丰富的功能,包括但不限于以下几点: 1. 高效的系统模板: 识付费系统模板采用了先进的技术架构,保证了系统的稳定性和可扩展性。模板化的设计使得用户可以轻松搭建

windows驱动开发-PNP管理器

PNP技术是由Microsoft提出的,英文Plug and play的缩写,中译即插即用,意思是系统自动侦测周边设备和板卡并自动安装设备驱动程序,做到插上就能用,无须人工干预,是Windows自带的一项技术。所谓即插即用是指将符合PNP标准的PC插卡等外围设备安装到电脑时,操作系统自动设定系统结构的技术。这就是说,当用户安装新的硬件时,不必设置任何跳线器开关,也不必用软件配置中断请求、内存地址或