在F4系列的固件库里面看到这个例程 stm32f4_dsp_stdperiph_lib\Project\STM32F4xx_StdPeriph_Examples\FMC\FMC_SDRAM_DataMemory 在readme里面看到介绍: This example shows how to use the MT48LC2M3B2B5-7E SDRAM mounted on STM324x9I-EVAL RevB as data memory (including heap and stack). 不是discovery板子上用的那个SDRAM芯片,使用discovery板子自带例程: STM32F429I-Discovery_FW_V1.0.1\Projects\Peripheral_Examples\FMC_SDRAM 中的初始化方式 /* SDRAM Initialization */ SDRAM_Init(); /* FMC SDRAM GPIOs Configuration */ SDRAM_GPIOConfig(); /* Disable write protection */ FMC_SDRAMWriteProtectionConfig(FMC_Bank2_SDRAM,DISABLE); 将上述代码添加到template工程system_stm32f4xx.c的初始化函数 void SystemInit(void)中的 #if defined(DATA_IN_ExtSRAM) || defined(DATA_IN_ExtSDRAM) SystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ 代码段的下方 根据readme中所说需要把所有相同文件替换,看了一下几个文件都没做改动就没做修改, 环境用的keil,在readme中有如下: <li> MDK-ARM - in Project->Options for Linker window, uncheck the option "Use Memory Layout from Target Dialog". You can then import the scatter file dedicated for this example. - uncomment "#define DATA_IN_ExtSDRAM " in the "system_stm32f4xx.c" file 第一点需要导入一个scatter file,但是工程好像没有给出。。。 第二点的效果应该和自己导入那两个初始化一样?吧。。。 没玩过这么深入,还请有经验的帮帮忙~~多谢多谢 |
把工程编译重编译会自动生成scatter file文件,要去掉勾选的"Use Memory Layout from Target Dialog"选项。
恩恩,可以看到sct文件,需要做什么修改吗还是直接可以用了
有什么帖子可以参考一下吗
应该需要修改,将SDRAM的地址添加到里面,仿照sram的格式!!
有个类似的设置帖子可以看看:【STM32F303开发】+ 使用片内的CCMRAM缩短代码执行时间
多谢多谢~
突然发现不能把函数放到SystemInit函数里面让startup调用…还要用寄存器改写
现在好像就遇到这种问题
我的sct文件现在是这样的:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00200000 { ; load region size_region
ER_IROM1 0x08000000 0x00200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00030000 { ; RW data
.ANY (+RW +ZI)
}
RW_ESDRAM1 0xd0000000 0x000400000{ ; RW data
.ANY (+RW +ZI)
}
}
最后一个ESDRAM1是discovery外挂的SDRAM,main函数中的数据现在可以定义到我要的大小,但是一执行到FMC开时钟就进默认中断了
继续看keil的帮助中…
/*-- FMC Configuration ------------------------------------------------------*/
/* Enable the FMC interface clock */
//RCC->AHB3ENR |= 0x00000001;
RCC->AHB3ENR |= RCC_AHB3Periph_FMC;
你这个分散加载肯定是有问题的,你要把启动代码部分数据放置在内部RAM中。