问题记录:STM32F1XX使用FSMC模拟8080出现的问题

问题

一、FSMC模拟8080时许的用法

关于STM32F1模拟8080时许,其实在很多的教程上都有说,例如野火的教程。所以从本质上来说,首先需要知道为什么FSMC能够模拟8080时许,而不是FSMC直接产生8080时许。

关于8080时许

8080时许在很多地方都可以找到,它其实源自于intel,读写时许如下(这张图来自网络):
在这里插入图片描述
所以从上图可以很清楚看到,8080实际是用4根控制线和8根数据线组成的。当然很多人说,为什么是8根?明明显示屏上用的是16根。当然,其实8080是支持8/16/24bit的方式,所以其实可以归类成DATA线(8/16/24 bit),因为这个时许的原因,它跟SRAM和NOR的时许极其相似。因此可以直接使用FSMC配置成NOR(最接近)的方式,来模拟8080时序,一般使用的是B模式进行驱动的,主要的参数是地址建立时间、地址保持时间、数据建立时间,FSMC只要配置好这个时许,就可以很好驱动8080了。STM32的FSMC是挂在HCLK上的,所以如果用STM32F1,则为72M,用F4则为168M(由芯片本身和自己配置来决定的)。因此1个HCLK时间就是 1/72M = 13.8ns,然后根据手册,看看Address Setup需要多少个HCLK,以此类推,就可以很好且精准配置FSMC了。

二、FSMC模拟8080后在示波器钟看到严重尖峰

在配置完FSMC之后,产品在长时间运行之后,却有白屏的出现。现象为:

  • 白屏后依旧能够运行。
  • 通过示波器测量电源,在FSMC有数据时,有强烈的尖峰出现。

一般来说,普通的总线例如SPI或UART,会加入TVS等,防浪涌、尖峰导致不可预测后果。在高速总线上,如FSMC/FMC,或在PCB Layout做等长处理,并且遵循3W原则处理,测量好阻抗匹配,必要时加入电阻保护。

三、尖峰出现的原因以及处理方法

分析尖峰出现的原因:

1、检测电源是否不稳定

通过示波器可以看到,电源是稳定正常得,所以可以排除电源不稳定导致的白屏。

2、检查阻抗是否匹配得上

通过使用毫欧表等仪器测量阻抗,也是满足要求的。因此也可以排除阻抗不匹配造成的。但PCB上没有遵顼3W原则,只做了等长处理。因此不排除会出现串扰和振铃。

3、检查信号是否出现扭曲

示波器上检查信号,并没有出现容性失真的现象。

解决方法

其实解决方法很简单,也就是从第二点可以下手,假设是因为串扰等原因导致的信号尖峰,那根本原因就是GPIO的翻转速度过快,在多根信号同时翻转的情况下,尖峰会极其明显。因此在配置GPIO的时候,将引脚的速度配置成2M的速度,在HAL库上就是低速模式,初始化时,数据引脚还要配置成下拉模式。就可以很好地解决这种问题。(有空了再把图配上!)

猜你喜欢

转载自blog.csdn.net/qq_42312125/article/details/114242447