最近有个项目使用了STM32F103ZE的片子,由于片内RAM的空间有限,所以使用FSMC的非复用总线方式,外接了61LV51216芯片,在keil4的OPTION选项中选择外部RAM的范围为0X68000000,SIZE为0XFFFFF; 该地址属于外部BANK1中第3区间,然后在system_stm32f10x.c中,打开“#define DATA_IN_ExtSRAM”,使得程序在启动后,进入MAIN()函数前,配置好外部SRAM,外部SRAM配置文件已经和STM32官方例程序进行对比过,没有错误,但调试后,程序在完成了启动文件后,在进入MAIN函数前,就跳进了“void HardFault_Handler(void)”函数,进入了死循环。
在看完了程序编译的MAP文件后发现,一但选择外部SRAM后,变量和STACK(堆栈)就全部自动转入了外部SRAM中,进行了单步调试后发现,程序在进行了压栈操作后,出栈时的返回就发生了错误,使得程序直接跳进了“void HardFault_Handler(void)”函数,如果能将堆栈地址能定义在内部SRAM中,程序应该可以顺利,但不知道怎样操作,不知道有没有人研究这个问题,怎样才能将全局变量定义到外部SRAM中,请坛中高手指点一下,谢谢!! |