1. 准备工作

  • 支持8080接口的并口屏
  • 主控使用STM32F103ZET6
  • 开发工具选择VSCode+Keil的方式

2. 环境搭建及工程创建

  • STM32F1这里采用标准库来进行开发

  • 这里下载对应的标准库驱动

  • 工程结构如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    ├─Bsp
    │ ├─Inc
    │ └─Src
    ├─Core
    │ ├─Inc
    │ └─Src
    ├─Doc
    ├─Drivers
    │ ├─CMSIS
    │ │ ├─CM3
    │ │ │ ├─CoreSupport
    │ │ │ └─DeviceSupport
    │ │ │ └─ST
    │ │ │ └─STM32F10x
    │ │ │ └─startup
    │ │ │ ├─arm
    │ │ │ ├─gcc_ride7
    │ │ │ ├─iar
    │ │ │ └─TrueSTUDIO
    │ │ └─Documentation
    │ └─STM32F10x_StdPeriph_Driver
    │ ├─inc
    │ └─src
    ├─KeilPrj
    │ ├─.vscode
    │ ├─DebugConfig
    │ ├─Listings
    │ └─Objects
    └─Libraries
  • image.png

  • image.png

  • image.png

  • image.png

  • image.png

3.FSMC及8080时序

3.1 FSMC简介

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

  • FSMC功能框图如下,其中划分了四组信号分别是
    • 公共信号(Shared signals):
      • FSMC_A[25:0]:地址锁存线
      • FSMC_D[15:0]:数据锁存线
      • FSMC_NOE:片选线
      • FSMC_NOE:输出使能
      • FSMC_NWE:写使能
      • FSMC_NWAIT:等待
    • NOR/PSRAM信号、NAND信号和PC Card信号image.png
  • FSMC将外设的地址映射到CPU中通过指针直接操作的方式独写外设中的数据。在STM32中的External Memory(FSMC映射)被划分成为如下四个Bank。每个Bank的大小为256Mbytes如下图所示

    • Bank1又划分为四个子Bank(支持四个设备),通过片选可以选择如下子Bank
      • Bank 1 - NOR/PSRAM 1
      • Bank 1 - NOR/PSRAM 2
      • Bank 1 - NOR/PSRAM 3
      • Bank 1 - NOR/PSRAM 4image.pngimage.png
    • Bank2和Bank3用于NAND Flash设备,每个Bank只支持一个设备
    • Bank4用于PC Card的扩展
    • 对应的地址映射区间如下图所示image.pngimage.png
  • 学过微机原理的应该都知道8086芯片,其实FSMC跟8086的操作类似,都是写地址、数据和使能。不过8086地址线和数据线采用分时复用的机制通过锁存将地址锁存后再读写数据。如图所示image.png

  • 74273是锁存芯片,输入是啥输出就是啥只有在CLK上升沿的时候对其写入数据

  • 74154是4-16译码器芯片,将二进制译码成对应的电平信号

3.1.1 FSMC时序

  • FSMC时序分不同的模式使用不同的时序进行通信,以下是NOR Flash Mode2/B的读写时序。其他模式的时序可以到官方的参考手册了解。这里选择Mode B的写时序模拟8080,原因是其时序和8080时序相似度极高。
  • 读时序image.png
  • 写时序image.png
  • 可以看到写入数据那一部中心虚线右边,当数据准备好后只要拉高NWE刚好模拟8080的WDX上升沿写入数据。而地址线有26位取最低位(或其他)当作D/CX那么将最低位接入到8080的D/CX当发送数据的时候如果地址线最低位是0则为命令,1则为数据。

    3.2 8080时序

  • 8080时序又叫做MCU接口是一种用于并行数据通信的接口时序标准,源于 Intel 8080 微处理器。Intel 公司在 1974 年推出了这款 8 位微处理器, 8080 微处理器的接口通信规则逐渐演变成了被广泛应用的 8080 时序标准。
  • 8080时序的信号(X表示低电平)组成如下:
    • CSX:片选线,低电平有效
    • RESX:复位线,低电平复位
    • D/CX:命令/数据选择,高电平时数据,低电平是命令
    • RDX:允许设备将数据输出到数据总线上,供主机读取。上升沿读取
    • WRX:主机可将数据写入到设备中,上升沿写入
    • D[17:0]:用于传输数据或命令,数据总线宽度也有 8 位和 16 位等多种
    • 下图为8086的时序图总共有两个时钟周期,分别是写入指令和写入数据image.png

3.3 FSMC时序和8080时序对比

  • 以下是两个时序的对比
  • 8080时序image.png
  • FSMC时序image.png
  • 信号对比
    FSMC信号 功能 8080信号 功能
    A[25:0] 地址线 D/CX 指令选择
    NEx 片选 CSX 片选
    NOE 读使能 RDX 读数据
    NWE 写使能 WDX 写数据
    D[15:0] 数据总线 D[17:0] 数据总线
    ## 参考文献 FSMC—扩展外部SRAM: https://doc.embedfire.com/mcu/stm32/f103badao/std/zh/latest/book/FSMC.html STM32F10x Reference Manual: https://www.st.com/resource/en/reference_manual/rm0008-stm32f101xx-stm32f102xx-stm32f103xx-stm32f105xx-and-stm32f107xx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf 【Proteus/8086】微机与接口技术实验:计时器:https://blog.csdn.net/qq_61814350/article/details/135140964 ILI9341 Datasheet: https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf