设置IROM1的起始地址为0x2000000,大小为0x8000(32KB);设置IRAM1的起始地址为0x2008000,大小为0x8000(32KB)。即把64KB的SRAM分为32KB的FLASH(当然这是SRAM虚拟出来的FLASH,掉电易失)和16KB的RAM。
(4)C/C++选项设置:
为什么在RAM中调试要设置这个宏而在FLASH中调试却不需要?这是因为我们的中断向量表默认位于FLASH中,而此时我们要在RAM中进行调试,所以需要把中断向量表拷贝到RAM中,相关代码在system_stm32f10x.c的SystemInit函数中:
其实system_stm32f10x.c文件中也有宏VECT_TAB_SRAM相关的代码:
把这行代码打开即可把中断向量表拷贝到RAM中。但是这里选择在C/C++选项选项里添加宏,因为这样可以保证SRAM版本与FLASH版本代码的一致性。
(5)Debug设置:
与在FLASH中调试不同的是,这里需要加入.ini文件:
这个.ini可以自己创建(也可以在芯片支持包里找到),这里我们建为Dbg_RAM.ini。文件里的内容如下:
其中这里的第11行是需要根据实际进行修改的,需要把工程编译得出的.axf格式文件的路径及其文件名填到这里。这里因为我们这里的的.ini文件在.axf的上一级目录:
所以此处以./Objects来表示。如果觉得麻烦的话,可以把.axf文件与.ini放在同一个目录下。
其它的按默认设置即可,然后点击Settings,并进行如下设置:
图中我们需要勾选Verify Code Download及Download to FLASH选项,也就是说点击调试按钮后,本工程的程序会被下载到内部 SRAM 中,只有勾选了这两个选项才能正常仿真。 (至于为什么 FLASH 版本的程序不需要勾选,不太清楚) 。
Download Function中的擦除选项配置为Do not Erase。这是因为数据写入到内部 SRAM 中不需要像 FLASH 那样先擦除后写入。 Programming Algorithm 的地址要与我们Target选项卡里设置的地址一致,否则可能会出现如下错误:
(6)编译,然后按Ctrl+F5进入调试界面,然后点击全速运行:
在Disassembly窗口中可看到地址为0x2000xxxx,说明代码烧进了SRAM中,这时候就可以像使用其他C语言IDE调试C语言程序一样打断点、单步运行我们的STM32程序啦。
以上就是在FLASH中调试与在SRAM中调试的设置方法,调试代码时可以选择SRAM版本的配置,调试完成再切换回FLASH版本的配置,把程序下载到FLASH中。切换方法:
在RAM中调试的优缺点以下来自《【野火】零死角玩转STM32—F429挑战者V2.pdf》。
优点: