STM32F4 SRAM调试教程
设置步骤
1、在Manage下的Project Targets创建RAM
此方法用于新建配置项RAM,专用于加载程序到RAM。
2、设置程序和数据的下载地址
STM32F4xx的RAM大小为192KB(112+16+64)
- 112KB和16KB的起始地址为0x2000 0000,通过AHB总线访问
- 64KB的起始地址为0x1000 0000,只能通过CPU直接访问。
3、更改DEBUG配置
SRAM_RUN_TRST.ini是用来配置PC、SP指针的,让他们指向SRAM
4、SRAM_RUN_INIT.inc文件代码
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
XPSR = 0x01000000; // Set Thumb bit
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}
LOAD %L INCREMENTAL // Download to RAM
Setup();
g, main
5、取消更新flash程序
6、设置BOOT0、BOOT1引脚电平
6.1 BOOT0、BOOT1引脚设置为高电平
将BOOT0、BOOT1置为高电平,即可直接从SRAM启动,但也需要按以上步骤进行配置,和BOOT0、BOOT1引脚设置为低电平不一样,不需要重新设置中断向量表,因为将BOOT0、BOOT1置为高电平,会将0x2000 0000映射到0x0,对于正点原子的寄存器版本,在main函数里面,会调用Stm32_Clock_Init()函数,该函数会调用MY_NVIC_SetVectorTable()函数设置中断向量表的地址为0x0。
6.2 BOOT0、BOOT1引脚设置为低电平
将BOOT0、BOOT1置为低电平,此时默认是从Flash启动,会将0x0800 0000映射到0x0,但利用SRAM调试,中断向量表的位置不在0x0,在0x2000 0000,所以需要重新设置。
#define VECT_TAB_OFFSET 0X00
#define VECT_TAB_SRAM
#ifdef VECT_TAB_SRAM
SCB->VTOR=SRAM_BASE | VECT_TAB_OFFSET;
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
#endif
6、按照以上步骤设置好之后,就可以点击调试按钮进入调试了。
可以看到,指令地址属于SRAM,成功改为了SRAM启动
参考文章
https://blog.csdn.net/qq_27718231/article/details/102739045/