STM32内部的RAM空间有限,当处理大数组时就不够用了,需要外扩RAM,给STM32芯片扩展内存与给PC扩展内存的原理是一样的。
1. SRAM(1MB)
表1 SRAM的引脚说明
图1 芯片引脚
2、STM32的FSMC控制器
图2 STM32的FSMC地址映射
因此每个Bank最大管理的空间是256M,而每个Bank有分为4个Sector,每个Sector管理的空间为64MB,FSMC控制器的FSMC_NE就决定了使用哪个Sector,例如下图板子的FSMC_NE3连接到SRAM的片选,因此地址空间就是:
0x6800 0000-0x6BFF FFFF
图3 原理图
FSMC控制寄存器主要是以下三类BCRx、RTRx、BWTRx,x对应1,2,3,4,四个Bank,也对应着NE1、NE2、NE3、NE4
其中在库函数中BCR,BTR合并成BTCR,
BTCR[0]是BCR1
BTCR[1]是BTR1
BTCR[2]是BCR2
BTCR[3]是BTR2
BTCR[4]是BCR3
BTCR[5]是BTR3
BTCR[6]是BCR4
BTCR[7]是BTR4
注意:当外扩了SRAM,可以适当设置,F407可以和内部SRAM一样使用。
1、system_stm32f4xx.c把宏定义打开
2、检查自己的SRAM使用的NEx,默认是NE2(PG9),以及引脚,如果不一致需要修改初始化代码。例如我的使用的就是NE3,就需要修改GPIOG->OSPEEDR = 0x00300fff等等;
3、Keil设置
4、定义数组,unsigned int Sram_Buffer[262140] __attribute__((section("EXRAM")));