欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32程序下载到SRAM调试方法

程序员文章站 2024-02-23 17:00:40
...

STM32程序下载到SRAM调试方法


调试程序时,我们通常是把程序加载到STM32的flash,然后调试。因为flash本省的写入次数是有限的,且市面上很多STM32是拆机片,flash的写入次数就是更严重的问题。
下面介绍的方法,是在调试时,程序下载到flash运行的方案,调试完成后,程序写入flash正式发行。

  1. Project manager里面增加一个编译目标选项。如led表示正式的发行编译方案,SRAM表示调试编译选项。
    STM32程序下载到SRAM调试方法
    STM32程序下载到SRAM调试方法

  2. 把RAM空间切分成两部分,第一部分模拟ROM存储代码,第二部分作为RAM使用。切多大呢?保险的话查编译输出,Code+RO-data需要放ROM里面,划分的ROM空间要大于这个数。也可以按照经验,对半砍,保险的话,按照上述方法进行确认。
    STM32程序下载到SRAM调试方法

  3. 空间切分好之后,把参数写入OptionsTarget页,IROM要用RAM的起始地址,按照第1步划分的大小填写。IRAM空间紧接其后。
    STM32程序下载到SRAM调试方法

  4. 记住output页设定的执行文件名称
    STM32程序下载到SRAM调试方法

  5. **C/C++**页面,Define需要加VECT_TAB_SRAM宏,中断向量搬移到SRAM
    STM32程序下载到SRAM调试方法

  6. debug页面,不要选择Load
    Application at Startup
    。在Initialization File添加文件,文件名随意。文件内容参考下面的内容

FUNC void Setup (void) {
  SP = _RDWORD(0x20000000);                      //设置堆栈指针
  PC = _RDWORD(0x20000004);                      //设置PC指针
  _WDWORD(0xE000ED08, 0x20000000);               //设置中断向量表地址
}

 //工程配置选项请不要勾选"Load Application ar Startup"
LOAD Objects\led.axf INCREMENTAL      //装载代码到CPU内部RAM(Objects\led.axf 自己工程的路径和文件名)
Setup();                                         //再调用Setup函数修改堆栈指针和PC指针 因为SP的值要从目标代码中读取
g, main                                          //运行到main函数

文件里面的Objects\led.axf需要更换成你的编译输出目录和文件名,参考第4步

  1. Utilities页面,不要选择Update Target before Debugging

大家使用时遇到的问题,邮件讨论aaa@qq.com