STM32在MDK中使用外部RAM浅解
开发板 神舟王STM32F207开发板
问题描述:
在使用emwin的时候由于占用的变量较多,出现了STM32F207内部RAM不够用的尴尬局面,开发板自带了4M的外部SRAM,因此考虑速度和存储的平衡,使用芯片内部RAM作为堆栈区使用,外部RAM则用来存储其他变量修改内容:
启动文件即startup_stm32f2xx.s文件
1.添加标志量:DATA_IN_ExtSRAM EQU 1 ;主要是方便控制切换使用内部和外部RAM
2.修改栈区:IF DATA_IN_ExtSRAM == 1
__initial_sp EQU 0x20000000 + Stack_Size
ELSE
__initial_sp
ENDIF
3.在进入main函数之前初始化外部RAM
有两种初始化方式
第一种:在SystemInit内初始化
SystemInit函数位于system_stm32f2xx.c文件内
定义宏变量DATA_IN_ExtSRAM
这样系统初始化时就会调用函数SystemInit_ExtMemCtl
修改SystemInit_ExtMemCtl函数内容,即初始化FSMC RAM
第二种
在startup_stm32f2xx.s内 调用main函数前先调用RAM初始化函数完成RAM的初始化
IMPORT __main
IMPORT SystemInit
IMPORT SRAM_Init
LDR R0, =SystemInit
BLX R0
LDR R0, =SRAM_Init
BLX R0
LDR R0, =__main
BX R0
ENDP
当然还有最蛋疼的一种方式就是在startup_stm32f2xx.s初始化外部RAM 不过需要修改成汇编语言
最后就是修改MDK的配置 在option->target勾选上外部RAM
之后就可以尝试定义一个大数组试试了
STM32MDK外部RA 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)