FSMC使用之外擴RAM的妙用
LDR R0,= 0x00001011 ;選擇存儲類(lèi)型SRAM,地址數據不復用,總線(xiàn)寬度16位,寫(xiě)使能,并啟動(dòng)存儲器塊
本文引用地址:http://dyxdggzs.com/article/182411.htmLDR R1,= 0xA0000010
STR R0,[R1] ;對控制寄存器配置完成
LDR R0,= 0x00000200 ;根據外部SRAM芯片的時(shí)序配置時(shí)序寄存器
LDR R1,= 0xA0000014
STR R0,[R1] ;時(shí)序寄存器配置結束
有了對FSMC的配置代碼,最后一步就是修改STM32的啟動(dòng)文件以及編譯軟件的設置,具體如何操作咱繼續往后看。
啟動(dòng)文件與編譯軟件配置
最后一步就是對啟動(dòng)文件進(jìn)行修改以及對編譯軟件進(jìn)行配置?,F在需要把片內的RAM全部作為棧來(lái)使用,所以在啟動(dòng)文件中要完成棧頂地址的設置以及長(cháng)度的設置。并在啟動(dòng)文件中完成對FSMC的配置。
DATA_IN_ExtSRAM EQU 1 ;方便以后修改所用
Stack_Size EQU 0x00000400 ;定義棧的大小
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
IF DATA_IN_ExtSRAM == 1 ;重點(diǎn)從這里開(kāi)始
__initial_sp EQU 0X20000000 + Stack_Size ;設置棧頂地址,STM32是向下生長(cháng) ;的所以這么設置
ELSE
__initial_sp
ENDIF
第一處修改完成,主要完成了對棧頂的設置。下面開(kāi)始第二處:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IF DATA_IN_ExtSRAM == 1 ;方便以后修改
;此處添加上面對FSMC配置的代碼
ENDIF ;修改結束
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
第二處修改完成,主要是加入了對FSMC配置的代碼。到此啟動(dòng)代碼的修改部分就結束了,下面對編譯軟件進(jìn)行設置。在設置之前我們回頭看看第一部分對FSMC的介紹,可以看出現在RAM的首地址為0x68000000,因為我們是通過(guò)Bank1的第三區控制的所以首地址是0x68000000。了解了這個(gè)我們就開(kāi)始設置編譯軟件:
到此為止所有工作都完工了,可以給UCGUI的存儲設備分配70K字節的空間都毫無(wú)壓力。最后提醒一點(diǎn),記得將Use MicroLIB 選上。
存儲器相關(guān)文章:存儲器原理
評論