STM32 - 使用FSMC控制LCD

本文详细介绍了如何使用STM32的FSMC外设控制LCD,讲解了FSMC的基本结构、通讯引脚、存储器控制器、时钟控制逻辑、地址映射以及控制异步NOR FLASH的时序。内容涵盖了硬件设计和软件设计,包括初始化设置、时序模拟和液晶屏操作的编程要点。
摘要由CSDN通过智能技术生成

1. FSMC简介

STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器,FSMC 是 Flexible Static Memory Controller 的缩写,译为灵活的静态存储控制器。它可以用于驱动包括 SRAM、 NOR FLASH 以及 NAND FLSAH 类型的存储器,不能驱动如 SDRAM 这种动态的存储器而 在 STM32F429 系列的控制器中,它具有 FMC 外设,支持控制 SDRAM 存储器。

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

FSMC 外设的结构框图

1.1. 通讯引脚

在框图的右侧是 FSMC 外设相关的控制引脚,由于控制不同类型存储器的时候会有一 些不同的引脚,看起来有非常多,其中地址线 FSMC_A 和数据线 FSMC_D 是所有控制器 都共用的。这些 FSMC 引脚具体对应的 GPIO 端口及引脚号可在《STM32F103 规格书》中 搜索查找到,不在此列出。 在本章示例中,控制 LCD 时,是使用 FSMC 的 NOR\PSRAM 模式的,而且控制 LCD 时使用的是 NOR FLASH 类型的模式 B,所以我们重点分析框图中 NOR FLASH 控制信号 线部分,控制 NOR FLASH 主要使用到表 27-4 的信号线:

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

1.2. 存储器控制器

上 面 不 同 类 型 的 引 脚 是 连 接 到 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 寄存器控制的参数类似,它专门用于控 制写时序的时间参数。

1.3. 时钟控制逻辑

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

1.4 FSMC 的地址映射

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

1.5 FSMC 控制异步 NOR FLASH 的时序

1.6 用 FSMC 模拟 8080 时序

1.7 FSMC相关结构体

NOR FLASH 时序结构体

1 typedef struct
2 {
3 uint32_t FSMC_AddressSetupTime; /*地址建立时间,0-0xF 个 HCLK 周期*/
4 uint32_t FSMC_AddressHoldTime; /*地址保持时间,0-0xF 个 HCLK 周期*/
5 uint32_t FSMC_DataSetupTime; /*数据建立时间,0-0xF 个 HCLK 周期*/
6 uint32_t FSMC_BusTurnAroundDuration;/*总线转换周期,0-0xF 个 HCLK 周期,在 NOR FLASH */
7 uint32_t FSMC_CLKDivision;/*时钟分频因子,1-0xF,若控制异步存储器,本参数无效 */
8 uint32_t FSMC_DataLatency; /*数据延迟时间,若控制异步存储器,本参数无效 */
9 uint32_t FSMC_AccessMode; /*设置访问模式 */
10 }FSMC_NORSRAMTimingInitTypeDef;

NOR FLASH 初始化结构体

1 /** 
2 * @brief FSMC NOR/SRAM Init structure definition
3 */
4 typedef struct
5 {
6 uint32_t FSMC_Bank; /*设置要控制的 Bank 区域 */
7 uint32_t FSMC_DataAddressMux; /*设置地址总线与数据总线是否复用 */
8 uint32_t FSMC_MemoryType; /*设置存储器的类型 */
9 uint32_t FSMC_MemoryDataWidth; /*设置存储器的数据宽度*/
10 uint32_t FSMC_BurstAccessMode; /*设置是否支持突发访问模式,只支持同步类型的存储器 */ 
11 uint32_t FSMC_AsynchronousWait; /*设置是否使能在同步传输时的等待信号,*/
12 uint32_t FSMC_WaitSignalPolarity; /*设置等待信号的极性*/
13 uint32_t FSMC_WrapMode; /*设置是否支持对齐的突发模式 */
14 uint32_t FSMC_WaitSignalActive; /*配置等待信号在等待前有效还是等待期间有效 */
15 uint32_t FSMC_WriteOperation; /*设置是否写使能 */
16 uint32_t FSMC_WaitSignal; /*设置是否使能等待状态插入 */
17 uint32_t FSMC_ExtendedMode; /*设置是否使能扩展模式 */
18 uint32_t FSMC_WriteBurst; /*设置是否使能写突发操作*/
19 /*当不使用扩展模式时,本参数用于配置读写时序,否则用于配置读时序*/
20 FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; 
21 /*当使用扩展模式时,本参数用于配置写时序*/ 
22 FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; 
23 }FSMC_NORSRAMInitTypeDef;

2. 硬件设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值