FSMC使用之外扩RAM的妙用
LDR R0,= 0x00001011 ;选择存储类型SRAM,地址数据不复用,总线宽度16位,写使能,并启动存储器块
本文引用地址:https://www.eepw.com.cn/article/182411.htmLDR R1,= 0xA0000010
STR R0,[R1] ;对控制寄存器配置完成
LDR R0,= 0x00000200 ;根据外部SRAM芯片的时序配置时序寄存器
LDR R1,= 0xA0000014
STR R0,[R1] ;时序寄存器配置结束
有了对FSMC的配置代码,最后一步就是修改STM32的启动文件以及编译软件的设置,具体如何操作咱继续往后看。
启动文件与编译软件配置
最后一步就是对启动文件进行修改以及对编译软件进行配置。现在需要把片内的RAM全部作为栈来使用,所以在启动文件中要完成栈顶地址的设置以及长度的设置。并在启动文件中完成对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 ;重点从这里开始
__initial_sp EQU 0X20000000 + Stack_Size ;设置栈顶地址,STM32是向下生长 ;的所以这么设置
ELSE
__initial_sp
ENDIF
第一处修改完成,主要完成了对栈顶的设置。下面开始第二处:
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配置的代码。到此启动代码的修改部分就结束了,下面对编译软件进行设置。在设置之前我们回头看看第一部分对FSMC的介绍,可以看出现在RAM的首地址为0x68000000,因为我们是通过Bank1的第三区控制的所以首地址是0x68000000。了解了这个我们就开始设置编译软件:
到此为止所有工作都完工了,可以给UCGUI的存储设备分配70K字节的空间都毫无压力。最后提醒一点,记得将Use MicroLIB 选上。
存储器相关文章:存储器原理
评论