问题描述
STM32F7的Flash可以在两个地址空间可见,一是AXIM接口的0x08000000处,二是ITCM接口的0x00200000处。如果将Flash定位到0x08000000处,使用J-Link调试下载程序没有问题;如果将Flash定位到0x00200000,那么J-Link不会下载程序了,说明J-Link只识别0x08000000作为STM32F7的Flash起始地址,不能识别0x00200000。我使用的STM32F7具体型号是:STM32F769BI。
解决办法
我用的调试器是GDB,GDB有load命令用来下载程序,load命令有一个可选参数,用来指定下载程序的偏移(offset),利用load命令的offset参数,告诉J-Link下载到0x08000000处就可以了。
load app.elf 0x07E00000
load命令最后面那个0x07E00000就是偏移,ELF文件中的下载地址是0x00200000,该地址加上0x07E00000就是0x08000000,J-Link就可以正确下载了。
如果使用的是GNU ARM Eclipse,那么可以在调试配置的Initialization Commands里面加入带偏移的load命令,并取消Load executable复选框,见下图,这样不用每次在GDB终端输load命令。