FSMC使用之外擴RAM的妙用
在STM32上跑UCOS_II和UCGUI時,要想讓屏幕穩(wěn)定不閃,顯示效果多樣化,而且分配給每個任務(wù)的堆??臻g足夠,STM32內(nèi)部的RAM肯定是不足的。最好的方法就是配置FSMC使內(nèi)部RAM作為堆棧使用,而外部RAM作為變量存儲和UCOS_II的任務(wù)堆?!,F(xiàn)在介紹FSMC以及如何配置,并寫出啟動文件中需要修改的地方。
本文引用地址:http://2s4d.com/article/182411.htmFSMC簡介
為什么可以利用FSMC來使用外部RAM呢,先了解一下STM32里的FSMC。大容量且引腳數(shù)在100腳以上的STM32F103芯片都帶有FSMC接口。FSMC是靈活的靜態(tài)存儲控制器,能夠與同步或異步存儲器和16位PC存儲器卡接口,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存儲器。FSMC框圖:
FSMC管理1 GB的映射地址空間。該空間劃分為4個大小為256 MB的BANK,每個BANK又劃分為4個64 MB的子BANK,F(xiàn)SMC的2個控制器管理的映射地址空間不同。NOR Flash控制器管理第1個BANK,NAND/PC Card控制器管理第2~4個BANK。如圖是FSMC的存儲空間地址映射:
這次的重點是用上外部的RAM,所以只介紹Bank1。STM32的FSMC存儲塊1被分為4個區(qū),每個區(qū)管理64M字節(jié)空間,每個區(qū)都有獨立的寄存器對連接的存儲器進行配置。Bank1的256M字節(jié)空間由28根地址先尋址。當Bank1接的是16位寬的設(shè)備,HADDR[25:1]->FSMC[24:0]。當Bank1接的是8為寬度存儲器的時候:HADDR[25:0]->FSMC[25:0]。
對FSMC的基本信息介紹就是上面這幾點,重點是關(guān)注每一個區(qū)的地址范圍。因為在下面的內(nèi)容會用到。
FSMC配置
根據(jù)此原理圖進行配置:
如圖是以FSMC的BANK1區(qū)域3來控制IS63WV51216這個1M字節(jié)容量的SRAM芯片。開始配置FSMC,現(xiàn)在是利用FSMC來操作外部SRAM。所以在選擇存儲器類型時就選擇SRAM。上圖可以看出地址總線和數(shù)據(jù)總線是分開的,所以配置的時候選擇不復(fù)用總線。也要注意的是芯片的數(shù)據(jù)寬度是16位。在配置完成后使能控制塊就可以了。如下是配置代碼
LDR R0,= 0x00000114
LDR R1,= 0x40021014
STR R0,[R1] ;使能FSMC時鐘
LDR R0, =0X000001E0
LDR R1, =0X40021018
STR R0,[R1] ;GPIOD,GPIOE,GPIOF,GPIOG時鐘使能
LDR R0,= 0x44BB44BB
LDR R1,= 0x40011400
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011404
STR R0,[R1] ;配置GPIOD
LDR R0,= 0xB44444BB
LDR R1,= 0x40011800
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011804
STR R0,[R1] ;配置GPIOE
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40011C00
STR R0,[R1]
LDR R0,= 0xBBBB4444
LDR R1,= 0x40011C04
STR R0,[R1] ;配置GPIOF
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40012000
STR R0,[R1]
LDR R0,= 0x44444B44
LDR R1,= 0x40012004
STR R0,[R1] ;配置GPIOG
存儲器相關(guān)文章:存儲器原理
評論