天天看點

問題記錄:STM32F1XX使用FSMC模拟8080出現的問題問題

STM32F1XX使用FSMC模拟8080出現的問題

  • 問題
    • 一、FSMC模拟8080時許的用法
      • 關于8080時許
    • 二、FSMC模拟8080後在示波器鐘看到嚴重尖峰
    • 三、尖峰出現的原因以及處理方法
      • 1、檢測電源是否不穩定
      • 2、檢查阻抗是否比對得上
      • 3、檢查信号是否出現扭曲
      • 解決方法

問題

一、FSMC模拟8080時許的用法

關于STM32F1模拟8080時許,其實在很多的教程上都有說,例如野火的教程。是以從本質上來說,首先需要知道為什麼FSMC能夠模拟8080時許,而不是FSMC直接産生8080時許。

關于8080時許

8080時許在很多地方都可以找到,它其實源自于intel,讀寫時許如下(這張圖來自網絡):

問題記錄:STM32F1XX使用FSMC模拟8080出現的問題問題

是以從上圖可以很清楚看到,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庫上就是低速模式,初始化時,資料引腳還要配置成下拉模式。就可以很好地解決這種問題。(有空了再把圖配上!)

繼續閱讀