STM32程序下载到SRAM调试方法

该文介绍了如何在调试STM32程序时,将代码下载到SRAM运行,以减少对Flash的写入次数。通过在Keil中设置两个编译选项,分别用于正式发行和调试。在调试模式下,程序会先加载到RAM,然后通过特定函数调整堆栈指针和PC指针,并设置中断向量表地址。调试完成后,程序再写入Flash。这种方法能保护Flash,延长其使用寿命。
摘要由CSDN通过智能技术生成

STM32程序下载到SRAM调试方法

调试程序时,我们通常是把程序加载到STM32的flash,然后调试。因为flash本身的写入次数是有限的,且市面上很多STM32是拆机片,flash的写入次数就是更严重的问题。
下面介绍的方法,在调试时,程序下载到ram运行。调试完成后,程序再写入flash正式发行。因此给项目设定了2个编译选项。
Project manager里面增加一个编译目标选项。如led表示正式的发行编译方案,SRAM表示调试编译选项。

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

空间切分好之后,把参数写入Options的Target页,IROM要用RAM的起始地址,按照第1步划分的大小填写。IRAM空间紧接其后。

记住output页设定的执行文件的路径和名称,方框里面的内容

**C/C++**页面,Define需要加VECT_TAB_SRAM宏,中断向量搬移到SRAM

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函数
1
2
3
4
5
6
7
8
9
10
文件里面的Objects\led.axf需要更换成你的编译输出目录和文件名,参考第4步。如果文件路径不对的话,在Keil调试页面左下角的Command窗口会出现错误提升,这个要关注一下。另外,不同CPU,中断向量表设定的寄存器地址是不一样的,也需要修改。不知道如何上载附件,就不留附件了。

Utilities页面,不要选择Update Target before Debugging。
————————————————
版权声明:本文为CSDN博主「nfreebird」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012780211/article/details/107878394

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值