首先,你得稍微了解一下FSMC的基本原理,就是說它是怎么用的,怎么配置,為什么能這么用。這個東西可以看看STM32F4的參考手冊。這里不具體說了。
FSMC其實就是把芯片內部的數(shù)據(jù)總線和地址總線引出來了,其實51單片機也是有這個總線外接的。沒有說把SRAM讀到內部內存再讀到CPU,SRAM就是內存,直接讀到CPU的寄存器,通過內部的AHB總線傳輸?shù)摹?/p>
我使用的是野火開發(fā)板的屏,因為想用開發(fā)板提供的程序直接移植。(小白就只能干這種事)因為買的最小系統(tǒng)板是100腳封裝的,所以在使用上有點小問題了。我在網(wǎng)上查了好多關于怎么在100引腳的板子上用FSMC上驅動LCD,沒有找到合適的答案,既然自己運氣好點,調出來了,那么就分享一下。即使不能幫到看到的人,起碼能給遇到和我相同問題的人一點安慰!慢慢調,能調出來的!
FSMC的數(shù)據(jù)線D0-D15,100封裝的也有,直接連上就好。(參考數(shù)據(jù)手冊IO口的定義)電源地什么的也當然也是。背光那個引腳是可以自己定義的,這個看個人喜好了。在LCD初始化的最后把背光開了,我的是低電平有效。復位信號和背光一樣。CS信號在FSMC定義是PG12,顯然沒有,但是CS即片選信號,既然我用的就是這一塊屏,沒必要控制選哪一個,直接使之永遠被選就好。當然自己用個引腳去控制理論上也可以。(我沒試過)最關鍵的是LCD-DC信號,使用方法是接在FSMC的地址線上,100封裝的也有幾根地址線,根據(jù)選定的地址線計算好RAM地址。
STM32的FSMC真是一個萬能的總線控制器,不僅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,還能控制LCD,TFT.
一般越是復雜的東西,理解起來就很困難,但是使用上卻很方便,如USB.
不過FSMC也有很詭異的地方。如
為什么呢?那時我還以為軟件或硬件還是芯片有BUG,
我就是從上面的不解中開始研究FSMC的…。。
FSMC翻譯過來就是靈活的靜態(tài)存儲器控制器,是用來驅動外部總線的。關于外部總線,你可以想象一下51的外部總線,STM32的FSMC實際上跟51的外部總線是一樣的,只不過性能更好,速度更快。 至于總線的優(yōu)勢,可以舉個51外部總線的例子,51單片機驅動1864或者1602液晶,如果用IO口模擬液晶的時序,需要用指令分別控制RS,WR,EN控制線還有數(shù)據(jù)線;但是如果用的是外部總線,從匯編指令上來講,只需要一條MOVX指令就解決問題了。二者的速度一目了然!
在一些TFT液晶的操作用經(jīng)常用得到,并且非常的好用!(以一個TFT為例)TFT的數(shù)據(jù)接口為:D0-D15或者D0-D8.
TFT的控制線有:復位信號RST,片選CS,輸出使能RD(讀信號),寫信號WE以及RS信號。
于STM32連線為: RST-》GPIO, CS-》NEx, RD-》NOE, WE-》RW, RS-》A0(或者其他任何一條地址線)
關鍵的一點就在于這個RS信號(我只說關鍵的這一點):
一般TFT的地址線只有1個RS. 以控制芯片的TFT為例.RS=0的時候一般是寫命令,RS=1的時候是寫數(shù)據(jù),把TFT作為只有2個地址的存儲器對待。
RS接到哪一個地址線都是可以的。假如RS接到A0,而片選為NE4,總線寬度8位。
那么可以定義
#define Bank1_SRAM4_ADDR ((u32)0x6C000000) #define LCD_DATA_ADDR (Bank1_SRAM4_ADDR + 1) #define LCD_CMD_ADDR (Bank1_SRAM4_ADDR + 0) 那么寫命令數(shù)據(jù)就是直接往LCD_CMD_ADDR寫數(shù)據(jù):(假設cmd,data為16位,而我的TFT數(shù)據(jù)接口是8位) LCD_WRITE_CMD(unsigned short cmd) //寫命令到TFT,16位要寫2次
{ *(vu8*)LCD_CMD_ADDR=(cmd》》8);
*(vu8*)LCD_CMD_ADDR=(cmd);
}
寫數(shù)據(jù)就是直接往LCD_DATA_ADDR寫數(shù)據(jù):
LCD_WRITE_DATA(unsigned short Data) //寫數(shù)據(jù)到TFT
{ *(vu8*)LCD_DATA_ADDR=(Data》》8);
*(vu8*)LCD_DATA_ADDR=(Data); }
至于RD,WE,RS,CS信號都已經(jīng)是FSMC控制器自動產(chǎn)生的,不用理會,不過當然是FSMC及GPIO初始化要正確。而RST信號還是需要通過操作GPIO來完成的。
這是最基本的2個操作。而那些什么設置X,Y,設置窗口,設置亮度,設置。。。。都是由這2個操作組合完成的。
72M HZ,320*240刷單色屏速度在 32fps左右.
評論