在RAM中调试代码
一.软硬件操作
硬件方面需要先修改BOOT0和BOOT1的引脚的高低电平。SRAM运行模式BOOT0和BOOT1都是高电平。
软件方面:
1.需要先取消勾选Use Memory Layout from Target Dialog,点击下方的Edit编辑.sct
2.修改.sct分散加载文件
原始文件
LR_IROM1 0x08000000 0x00080000 { ; load region size_regionER_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_regionER_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_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#elseSCB->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引脚的不同电平,会将地址映射到不同的地址去取值。
三种启动方式的区别
视频链接:野火F407-在RAM中调试代码