IAR如何拓展SRAM
如果你的开发板上有外部SRAM,讲下如何通过FSMC使用外部SRAM拓展内存
打开CubeMX-> 使能FSMC-> 选中控制段(本设备使用NE3-SRAM)-> 配置数据位 -> 配置时序
本设备采用 IS62WV51216 ,19bit地址+16bit数据,最大 512x16bit = 1MB,时序的参数通过看数据手册得出
重新生成代码,写个测试程序验证,下载运行,如果能打印正确则fsmc成功
Options-> Linker -> Edit ,这时加了FSMC会发现Memory Regions变得很全了
把PSRAM3的地址范围加进去,1M( 0x6800 0000 - 0x680f ffff),NE3的起始地址都为0x6800 0000,结束地址自己算内存大小
因为F407 SRAM有3块:
SRAM1 112K | (0x2000 0000 - 0x2001 BFFF) |
SRAM2 16K | (0x2001 C000 - 0x2002 0000) |
CCM-RAM 32K | (0x1000 0000 - 0x1000 FFFF) |
这里把连续的 SRAM1 和 SRAM2 合并一起到SRAM1,SRAM2为0,CCM-RAM为系统高速RAM不动
如果没有像我这样不要着急,是因为你的icf文件没改变,查看自己的icf文件是否有完整的memory信息!
找到加载的源文件用记事本打开查看,或者直接在工程里打开查看
可以看到若想显示完整的memory信息,需要加载fsmc.xml,要是没有怎么办?
找到IAR的安装目录下的linker库(IAR->arm->config-linker-> ST)
复制里面所有的代码(注意:不是复制文件,是复制里面内容)到自己的工程目录下的 flash.icf 文件
重复配置上一步!!!
至此,我们能够清除看到所有内存信息的宏定义,以及堆栈大小定义
关于FSMC我们看到,把其4块合并成了一块内存,取名 FSMC_region
所以到最后,我们把 FSMC的 内存加进来,我们就可以修改其堆栈放入的位置
这里我把FSMC 所有全部给 堆 使用,SRAM 给 栈 使用,其余的 rw 和 section 放到 CCRAM中
注意:名字不要写错
最后把 堆栈空间拉满!!!