FSMC是Flexible static memory controller(可變靜態存儲控制器)的簡稱,是STM32系列采用的一種新型的存儲器擴展技術,支持SRAM、Nor Flash、LCD、PSRAM、NAND Flash、PC Card等。只在某些芯片上有,使用前要查看對應的手冊確定。
在FSMC的角度來看,外部存儲分成了4個固定的大小為256MB的bank。
Bank1分成了4個子bank,每一個64MB大小,并且每個bank都有獨立的片選,用來控制Nor Flash、RAM、PSRAM。Bank2和Bank3用來控制NAND Flash。Bank4控制PC Card。
不同的Bank共享了地址、數據、讀、寫信號,其他信號根據bank的用途不同會有一些差別。
下面介紹下如何通過FSMC點亮LCD。LCD可以看作是一個SRAM,通過Bank1控制。理論上支持8080接口的LCD都可以使用FSMC來點亮(不知是否有例外)。LCD有8位或16位接口的,FSMC的設置需要一致,本文以16位為例。
STM32的設置使用cubeMX很方便,下面是針對FSMC的設置,其他基礎設置這里就不羅列了。
這里使用了bank1的第四個子bank,片選是NE4;
內存類型是LCD接口;
LCD寄存器選擇為A0,其他A1-A24都可以,這本來是存儲器尋址信號,這里用來接LCD的RS信號,控制LCD是寫命令(低0)還是寫數據(高1)。;
數據選擇16位。
再往下
寫操作使能;
擴展模式Disabled;
地址建立時間設置為6;
數據建立時間設置為6;
總線翻轉時間設置為0.
上面建立時間范圍如下表所示,實際要根據LCD的時序確定。
除了上面的配置,別忘了一般LCD還有個背光控制引腳。
之后生成代碼。(只羅列了變量和函數內容,不是真正的函數)
背光引腳代碼如下:
FSMC的初始化代碼如下:
FSMC的引腳配置
FSMC模式和時序配置:
到此,FSMC的初始化就搞定了,后邊就可以通過內存地址直接控制LCD了。這里有幾個需要注意的點,下面來詳細說說。
第一, 存儲基地址
bank1的基地址是0x60000000,不同的子bank地址不同,通過HADDR[27:26]這兩位的值確定。我們選擇了第四個,這兩位是11,所以子bank的基地址是
0x60000000+(0x3<<26)=0x6c000000。
第二, 外部存儲地址
HADDR[25:0]存儲了外部存儲器的地址,對于8位和16位略有差別。
8位用到了HADDR[25:0]的所有位,對映FSMC_A[25:0]。而16位只用了HADDR[25:1],沒有用HADDR0,所以對于16位,HADDR[25:1]就對映了FSMC_A[24:0]。
第三, LCD的數據or命令選擇
LCD沒有地址,我們引出的地址線實際上接到了LCD的RS或者叫D/C引腳上。當RS為低,則通過D[15:0]的是命令,當RS為高,則通過D[15:0]的是數據。上面我們選擇了A0,在16位模式下,寫命令的地址就是0x6c000000(HADDR1為0),寫數據的地址就是0x6c000002(HADDR1為1)
(其實地址不唯一,只要保證HADDR1的0和1準確就行,其他地址位隨意,但是一般選擇最簡單或實用的地址,后邊會提到)。
我們再假設選擇A3,那么寫命令的地址還是0x6c000000(HADDR4為0),寫數據的地址是0x6c000010(HADDR4為1)。所以結論就是,寫命令的地址可以都是0x6c000000,寫數據的地址根據選擇的地址線確定。這是最簡單的地址。
第四, 巧用結構體,只需定義一個地址
在很多參考例程中,會出現下面的實現方法:
我們都知道結構體是順序排列的,所以LCD_REG的地址是0x6c000000,變量大小是2個字節(16位),所以LCD_RAM的地址就是0x6c000002,剛好就是我們選擇A0地址線(HADDR1)拉高的值。
那如果選擇其他地址線,這里就需要做一點變動。比如選擇A3,我們逆向操作來解決這個問題,A3寫數據地址是0x6c000010,也就是LCD_RAM的地址。LCD_REG比LCD_RAM小兩個字節,減2就得到了0x6c00000e,此時HADDR4為0,那這個就是我們需要的LCD基地址,因為只有這個值加2后會變成寫數據的地址,這就是那個實用的地址。
操作框圖如下圖所示,FSMC初始化好后就跟透明的一樣,只需要往指定的地址送命令或者數據即可。類似串口藍牙的透傳,一旦設置配對好,就可以無視藍牙的存在。
后面的事情就跟具體的LCD有關了,比如讀取ID,寫初始化序列等,這里就不多介紹了。
-
lcd
+關注
關注
34文章
4426瀏覽量
167494 -
存儲器
+關注
關注
38文章
7492瀏覽量
163834 -
sram
+關注
關注
6文章
767瀏覽量
114689 -
STM32
+關注
關注
2270文章
10900瀏覽量
356005 -
FSMC
+關注
關注
0文章
55瀏覽量
38151
發布評論請先 登錄
相關推薦
評論