使用SDRAM之后,SDRAM可能当做数据区来使用。如果采用了分散加载文件的方式,SDRAM要是被划分为数据区,在调用main函数之前必须进行初始化。否则会出现HardFault_Handler。因为使用到了SDRAM中的地址,而此时SDRAM还没有初始化,因此出现地址越界。可以在启动代码中初始化:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __low_level_init
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__low_level_init
BLX R0
LDR R0, =__main
BX R0
ENDP
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __low_level_init
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__low_level_init
BLX R0
LDR R0, =__main
BX R0
ENDP
在__low_level_init中调用EMC_Init()初始化SDRAM。

本文详细介绍了如何在调用main函数前正确初始化SDRAM,避免出现HardFault_Handler错误。通过在启动代码中的Reset_Handler过程和__low_level_init函数中加入特定指令实现SDRAM的初始化。
3938

被折叠的 条评论
为什么被折叠?



