F407在RAM中调试
在RAM中调试代码
一.软硬件操作
硬件方面需要先修改BOOT0和BOOT1的引脚的高低电平。SRAM运行模式BOOT0和BOOT1都是高电平。
软件方面:
1.需要先取消勾选Use Memory Layout from Target Dialog,点击下方的Edit编辑.sct
2.修改.sct分散加载文件
原始文件
LR_IROM1 0x08000000 0x00080000 { ; load region size_region
ER_IROM1 0x08000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}
修改后的文件
LR_IROM1 0x20000000 0x00010000 { ; load region size_region
ER_IROM1 0x20000000 0x00010000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20010000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
}
3.添加宏更改中断向量表的地址
/* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
不直接在文件中添加宏定义是因为工程保留了SRAM和FLASH二种下载方式
4.修改文件下载设置
这里的地址需要和修改后的.sct文件的地址对应起来,不然会下载失败的
在debug界面需要勾选Verify Code Download
在.map文件下可以看到,地址变了0x20000000地址偏移,而不是FLASH的0x08000000地址。
这样就可以进行SARM的配置,直接通过JLINK下载即可。SARM下载会在断电后丢失程序。
二、原理
STM32在系统上电在某个地址下取出栈指针地址和程序指针地址,而BOOT引脚的不同电平,会将地址映射到不同的地址去取值。
三种启动方式的区别