网站空间数据库上传,建筑公司是做什么的,网站使用字体,冷饮店怎么做网站目录 FSMC简介
FSMC框图介绍
FSMC通信引脚介绍
FSMC_NWE 的作用
FSMC_NWE 的时序关系
FSMC_NOE 的含义
FSMC_NOE 的典型用途
FSMC_NOE 的时序关系 使用FSMC驱动LCD
FSMC时序介绍
时序特性中的 OE ILI9341重点时序#xff1a;
FSMC地址映射 HADDR与FSMC_A关系 LCD的…
目录 FSMC简介
FSMC框图介绍
FSMC通信引脚介绍
FSMC_NWE 的作用
FSMC_NWE 的时序关系
FSMC_NOE 的含义
FSMC_NOE 的典型用途
FSMC_NOE 的时序关系 使用FSMC驱动LCD
FSMC时序介绍
时序特性中的 OE ILI9341重点时序
FSMC地址映射 HADDR与FSMC_A关系 LCD的RS信号线与地址线关系
FSMC相关寄存器介绍
SRAM/NOR闪存片选控制寄存器FSMC_BCRx
SRAM/NOR闪存片选时序寄存器FSMC_BTRx
SRAM/NOR闪存写时序寄存器FSMC_BWTRx
FSMC寄存器组合说明
FSMC相关HAL库函数简介 SRAM_HandleTypeDef
FSMC_NORSRAM_InitTypeDef
FSMC模拟8080时序读写简化代码 FSMC简介
FSMCFlexible Static Memory Controller灵活的静态存储控制器。
用途用于驱动SRAMNOR FLASHNAND FLASH及PC卡类型的存储器。 配置好FSMC定义一个指向这些地址的指针通过对指针操作就可以直接修改存储单元的内容FSMC自动完成读写命令和数据访问操作不需要程序去实现时序。 FSMC外设配置好就可以模拟出时序。
实例FSMC模拟8080时序控制LCD F1/ F4(407)系列大容量型号且引脚数目在100脚以上的芯片都有FSMC接口
F4/F7/H7系列就是FMC接口
FSMC框图介绍 ① 时钟控制逻辑
FSMC挂载在AHB总线上时钟信号来自HCLK
② STM32内部的FSMC控制单元
NOR闪存和PSRAM控制器、NAND闪存和PC卡控制器、FSMC配置寄存器
③ 通信引脚
不同类型存储器用到的信号引脚
公共信号引脚
FSMC通信引脚介绍 用于连接硬件设备的引脚控制不同类型的存储器会用不同的引脚。 FSMC_NWE 的作用 用于写操作 FSMC_NWE 用于通知外部存储器执行写操作。在写操作期间FSMC 会将 FSMC_NWE 拉低逻辑 0使能外部存储器的写操作。FSMC_NWE 通常连接到外部存储器的 WEWrite Enable引脚确保数据可以正确写入外部存储器。 与数据总线和地址总线的配合 在写操作中 FSMC_NWE 为低电平时外部存储器会从 FSMC 的数据总线FSMC_Dx上读取数据并将数据写入指定的存储地址由地址总线 FSMC_Ax 提供。当 FSMC_NWE 回到高电平时写操作完成。 写入控制的时序信号 FSMC 控制 FSMC_NWE 的上升沿和下降沿来定义写入周期的开始和结束确保数据正确写入外部存储器。
FSMC_NWE 的时序关系
FSMC_NWE 的控制信号与以下其他 FSMC 信号配合使用
FSMC_NE芯片选择Chip Select 用于选择具体的外部存储器。当 FSMC_NE 为低电平时所选存储器芯片被激活。FSMC_A地址总线 提供数据写入的目标地址。FSMC_D数据总线 提供要写入的数据。FSMC_NWAIT等待信号可选 外部存储器可以通过拉高或拉低 FSMC_NWAIT 信号请求延迟完成写操作。
以下是典型的 FSMC 写入时序
FSMC 首先激活 FSMC_NE芯片选择。然后将 FSMC_Ax地址和 FSMC_Dx数据设置为目标地址和数据值。FSMC_NWE 被拉低外部存储器开始写入。当写入完成后FSMC_NWE 被拉高FSMC 将完成该写操作。
FSMC_NOE 的含义
FSMC_NOE 的全称是 FSMC Output Enable (输出使能)它是 FSMC 用于控制外部存储器数据输出的信号引脚。 名称含义 N代表负逻辑Active Low低电平有效。OEOutput Enable输出使能信号。 功能 FSMC_NOE 控制外部存储器是否将数据输出到 FSMC 的数据总线上。当 FSMC_NOE 为低电平逻辑 0时外部存储器的输出缓冲区被使能数据可以传输到 FSMC 的数据总线。当 FSMC_NOE 为高电平逻辑 1时外部存储器的输出缓冲区被禁用数据不会输出。
FSMC_NOE 的典型用途 与外部存储器的接口控制 在读取外部存储器如 NOR Flash 或 SRAM时FSMC 控制 FSMC_NOE 以使能数据的输出。FSMC_NOE 信号通常连接到外部存储器的 OE 引脚表示“是否允许数据输出”。 在读取操作中的作用 FSMC 进行读取操作时FSMC_NOE 被拉低通知外部存储器将数据放到数据总线上。在写操作或非活跃状态时FSMC_NOE 保持高电平。
FSMC_NOE 的时序关系
FSMC_NOE 的控制通常与以下信号配合使用
FSMC_NE芯片选择Chip Select FSMC_NE 用于选择具体的外部存储器芯片。当 FSMC_NE 为低电平时选中的外部存储器被激活。FSMC_NWE写使能Write Enable 用于指示写操作。当 FSMC_NWE 为低电平时表示正在向存储器写入数据。地址和数据总线FSMC_A 和 FSMC_D 地址总线FSMC_A提供要访问的外部存储器地址。数据总线FSMC_D用于传输数据。
典型的读取时序如下
FSMC 控制 FSMC_NE芯片使能和 FSMC_NOE输出使能信号激活外部存储器的数据输出。FSMC_NOE 拉低后外部存储器将数据输出到数据总线上。数据输出完成后FSMC 会将 FSMC_NOE 拉高关闭数据输出。 使用FSMC驱动LCD FSMC时序介绍
FSMC是Flexible灵活的可以产生多种时序来控制外部存储器。 NOR/PSRAM控制器产生的异步时序就有5种总体分为两类一类是模式1其他为拓展模式。 拓展模式相对模式1来说读写时序时间参数设置可以不同满足存储器读写时序不一样需求。 时序特性中的 OE
在时序特性中“OE 在读取时序片选过程中不翻转” 或 “OE 在读取时序片选过程中翻转” 指的是 FSMC 控制 OE 信号在读取操作期间的状态行为 不翻转 读取操作开始时FSMC 会将 OE 拉低保持不变直到读取完成。这种方式适用于大多数 SRAM 或 CRAM 类型存储器。 翻转 读取操作期间FSMC 会在不同阶段对 OE 信号进行翻转拉低-拉高-拉低以协调更复杂的外部存储器时序。这种方式适用于特定类型的外部存储器例如一些特殊的 SRAM 或 PSRAM。 ILI9341重点时序
读ID低电平脉宽(trdl) 读ID高电平脉宽(trdh)
读FM低电平脉宽(trdlfm) 读FM高电平脉宽(trdhfm)
写控制低电平脉宽(twrl) 写控制高电平脉宽(twrh) ID指LCD的ID号 FM指帧缓存即GRAM
FSMC时序中ADDSET和DATAST不需要严格要求可以使用实践值 FSMC地址映射
使用FSMC外接存储器其存储单元是映射到STM32的内部寻址空间的。
从FSMC角度看可以把外部存储器划分为固定大小为256M字节的四个存储块。
FSMC存储块1被分为4个区每个区管理64M字节空间。64M Byte 2^26 Byte HADDR与FSMC_A关系
HADDR总线是转换到外部存储器的内部AHB地址线。
简单来说从CPU通过AHB总线到外部信号线之间的关系。
HADDR是字节地址而存储器访问不都是按字节访问接到存储器的地址线与其数据宽度相关。
注意数据宽度为16位时地址存在偏移 LCD的RS信号线与地址线关系
8080接口中RS(数据/命令选择线)用FSMC的某根A地址线进行替换。
FSMC_A10接到RS线上 当FSMC_A10为高电平时即RS为高电平FSMC_D[15:0]被理解为数据。 当FSMC_A10为低电平时即RS为低电平FSMC_D[15:0]被理解为命令。
究竟发送什么地址代替
1、确认FSMC_NE4基地址 0x6C00 0000 NEx(x1…4)0x6000 0000 (0x400 0000 * (x - 1))
2、确认FSMC_A10对应地址值
2^10 x 2 0x800 FSMC_Ay(y0…25) 2^y x 2
3、确认两个地址
代表LCD命令的地址0x6C00 0000
代表LCD数据的地址0x6C00 0800 FSMC相关寄存器介绍 对于NOR_FLASH/PSRAM控制器(存储块1)配置工作通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置其中x1~4对应4个区。 SRAM/NOR闪存片选控制寄存器FSMC_BCRx EXTMOD扩展模式使能位控制是否允许读写不同的时序。读和写用不同的时序该位设置为1
WREN写使能位。 向TFTLCD写入数据该位设置1 MWID[1:0]存储器数据总线宽度。00表示8位数据模式01表示16位数据模式10和11保留。
MTYP[1:0]存储器类型。00表示SRAM、ROM01表示PSRAM10表示NOR FLASH11保留。
MBKEN存储块使能位。该位设置1 SRAM/NOR闪存片选时序寄存器FSMC_BTRx ACCMOD[1:0]访问模式。00模式A01模式B10模式C11模式D。
DATAST[7:0]数据保持时间等于DATAST(1)个HCLK时钟周期DATAST最大为255。
对于ILI9341来说其实就是RD低电平持续时间最小为355ns。
对于F1一个HCLK 13.9ns(1/72M)设置为15 STM32F1的FSMC性能存在问题
对于F4一个HCLK 6ns(1/168M)设置为60
ADDSET[3:0]地址建立时间。表示ADDSET(1)个HCLK时钟周期ADDSET最大为15。
对于ILI9341来说相当于RD高电平持续时间为90ns。
F1即使设置为0RD也有超过90ns的高电平这里设置为1。F4对该位设置为15。 如果未设置EXTMOD位则读写共用这个时序寄存器
SRAM/NOR闪存写时序寄存器FSMC_BWTRx ACCMOD[1:0]访问模式。00模式A01模式B10模式C11模式D。
DATAST[7:0]数据保持时间等于DATAST(1)个HCLK时钟周期DATAST最大为255。
对于ILI9341来说其实就是WR低电平持续时间最小为15ns。
对于F1一个HCLK 13.9ns设置为3
对于F4一个HCLK 6ns设置为9
ADDSET[3:0]地址建立时间。表示ADDSET(1)个HCLK时钟周期ADDSET最大为15。
对于ILI9341来说相当于WR高电平持续时间为15ns。
F1即使设置为1WR也有超过15ns的高电平这里设置为1。
F4对该位设置为8。 FSMC寄存器组合说明 在ST官方提供的寄存器定义里面并没有定义FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等这个单独的寄存器而是将他们进行了一些组合规则如下
FSMC_BCRx和FSMC_BTRx组合成BTCR[8]寄存器组他们的对应关系如下 BTCR[0]对应FSMC_BCR1BTCR[1]对应FSMC_BTR1 BTCR[2]对应FSMC_BCR2BTCR[3]对应FSMC_BTR2 BTCR[4]对应FSMC_BCR3BTCR[5]对应FSMC_BTR3 BTCR[6]对应FSMC_BCR4BTCR[7]对应FSMC_BTR4
FSMC_BWTRx则组合成BWTR[7]寄存器组他们的对应关系如下 BWTR[0]对应FSMC_BWTR1BWTR[2]对应FSMC_BWTR2 BWTR[4]对应FSMC_BWTR3BWTR[6]对应FSMC_BWTR4 BWTR[1]、BWTR[3]和BWTR[5]保留没有用到 FSMC相关HAL库函数简介 本例程涉及HAL库相关函数如下
HAL_StatusTypeDef HAL_SRAM_Init (
SRAM_HandleTypeDef *hsram,
FSMC_NORSRAM_TimingTypeDef *Timing,
FSMC_NORSRAM_TimingTypeDef *ExtTiming ) SRAM_HandleTypeDef
typedef struct
{ FSMC_NORSRAM_TypeDef *Instance; /* 寄存器基地址 */FSMC_NORSRAM_EXTENDED_TypeDef *Extended; /* 扩展模式寄存器基地址 */ FSMC_NORSRAM_InitTypeDef Init; /* SRAM初始化结构体*/ HAL_LockTypeDef Lock; /* SRAM锁对象结构体 */ __IO HAL_SRAM_StateTypeDef State; /* SRAM设备访问状态 */ DMA_HandleTypeDef *hdma; /* DMA结构体 */
} SRAM_HandleTypeDef;寄存器基地址选择FSMC_NORSRAM_DEVICE
扩展模式寄存器基地址FSMC_NORSRAM_EXTERNDEVICE FSMC_NORSRAM_InitTypeDef
typedef struct
{ uint32_t NSBank; /* 存储区块号 */ uint32_t DataAddressMux; /* 地址/数据复用使能 */ uint32_t MemoryType; /* 存储器类型 */ uint32_t MemoryDataWidth; /* 存储器数据宽度 */uint32_t BurstAccessMode; /* 设置是否支持突发访问模式只支持同步类型的存储器 */uint32_t WaitSignalPolarity; /* 设置等待信号的极性 */uint32_t WrapMode; /* 突发模式下存储器传输使能 */uint32_t WaitSignalActive; /* 等待信号在等待状态之前或等待状态期间有效 */ uint32_t WriteOperation; /* 存储器写使能 */ uint32_t WaitSignal; /* 是否使能等待状态插入 */ uint32_t ExtendedMode; /* 使能或者禁止使能扩展模式 */ uint32_t AsynchronousWait; /* 用于异步传输期间使能或者禁止等待信号 */ uint32_t WriteBurst; /* 用于使能或者禁止异步的写突发操作 */ uint32_t PageSize; /* 设置页大小 */
} FSMC_NORSRAM_InitTypeDef;储存区块号选择FSMC_NORSRAM_BANK4
地址/数据复用功能选择FSMC_DATA_ADDRESS_MUX_DISABLE
储存器类型选择FSMC_MEMORY_TYPE_SRAM
储存器数据宽度选择FSMC_NORSRAM_MEM_BUS_WIDTH_16
储存器写使能选择FSMC_WRITE_OPERATION_ENABLE
使能或者禁止使能扩展模式选择FSMC_EXTENDED_MODE_ENABLE FSMC_NORSRAM_TimingTypeDef
typedef struct
{ uint32_t AddressSetupTime; /* 地址建立时间 */ uint32_t AddressHoldTime; /* 地址保持时间 */ uint32_t DataSetupTime; /* 数据建立时间 */ uint32_t BusTurnAroundDuration; /* 总线周转阶段的持续时间 */uint32_t CLKDivision; /* CLK时钟输出信号的周期 */uint32_t DataLatency; /* 同步突发NOR FLASH的数据延迟 */uint32_t AccessMode; /* 异步模式配置 */
} FSMC_NORSRAM_InitTypeDef;这里要配置addressSetupTime地址建立时间和DataSetupTime数据建立时间。
FSMC模拟8080时序读写简化代码
void lcd_wr_cmd(volatile uint16_t cmd){cmd cmd;*(uint16_t *)(FSMC_ADDR_CMD) cmd;}
void lcd_wr_data(volatile uint16_t data)
{data data;*(uint16_t *)(FSMC_ADDR_DATA) data;
}uint16_t lcd_rd_data(void)
{volatile uint16_t ram; ram *(uint16_t *)(FSMC_ADDR_DATA);return ram;
}硬件IO连接关系