stm32程序flash下载和sram运行

本文详细介绍了如何将STM32程序下载到Flash并运行,以及如何在SRAM中运行以保护Flash。通过设置调试器、配置内存空间、修改启动文件和使用特定的 ini 文件,可以在不擦除Flash的情况下在SRAM中验证程序,降低了对Flash的损耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

在stm32新建工程(参照stm32栏目的stm32新建工程)后,需要下载写好的程序运行。
有两种方式验证你程序的正确性,一种是直接下载到flash中,一种是在sram中跑。程序在sram中运行掉电会消失,不过避免了每次擦写flash,毕竟flash的擦写次数是有限的,在sram中验证程序没有问题后,可以再烧录在flash中。

烧录工具:st-link

2. 程序下载到flash中

在编译完程序后,在烧录程序前需要进行一些设置。首先连接上st-link。然后进行下面的步骤。
1)点击界面魔法棒
在这里插入图片描述
2)勾选ROM/RAM空间(一般都默认勾选)
在这里插入图片描述
3)选择调试器。这里选择st-link。勾选启动时加载应用程序和自动进入main函数。
在这里插入图片描述
4)设置st-link debugger settings。port选择SW,选择调试速率。设置flash擦除扇区,添加flash。
在这里插入图片描述

在这里插入图片描述
5)选择下面两项
在这里插入图片描述
6)下载程序,点击load按钮。
在这里插入图片描述

3. 程序在sram中运行

由于flash的擦除次数有限,而手上的开发板又是一代代传承下来的,为避免啥也没学会,stm32就报废了,想掌握一种在线编程的方法,即将程序不烧录进flash,而是放在sram中运行。
1)给sram分区
M4处理器的flash初始地址为0x80000000,而sram起始地址为0x20000000。首先将sram空间均分,一部分为构造的rom,一部分为ram。注意rom的地址是紧跟着rom的。这里构造的目的是假装从rom启动,这样不需要在硬件上变更boot0、boot1的值,这个我验证了不变更硬件,即不需要boot0/1选择1,1进入sram启动,只维持0、0,也可工作。
在这里插入图片描述
2)增加sram向量表
在这里插入图片描述
对应的要在main函数中加
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0)
;,这样才能找到sram的入口地址。否则入口地址总是在0x00000000(当代码有警告如语法错误时,也是显示0).
在这里插入图片描述
3)增加初始化文件
增加ini同时,load application at startup注意也不要勾选,否则先从flash启动。这一步很重要。

在这里插入图片描述
增加的ini文档,在安装包里,一定要增加ini,否则还是在flash地址跑

地址:PACK\Keil\STM32F4xx_DFP\2.15.0\MDK\Boards\ST\32F469IDISCOVERY\Blinky\Debug_RAM.ini
文档的内容如下:
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
XPSR = 0x01000000; // Set Thumb bit
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}

LOAD %L INCREMENTAL // Download to RAM
Setup();

g, main
有看到说需要把LOAD %L INCREMENTAL 的%L改为 …\obj\template20211206.axf ,即改为输出执行文件所在的地址。我调试了两种,发现没必要,用官方的就好,不过要注意SP/PC的地址是不是sram的地址。
4)选择不擦除flash,因为现在是在sram空间里
在这里插入图片描述
在这里插入图片描述
5)不要勾选update target before debugging,意思是在线调试时,不下载到flash中,否则在进入debug时,会显示flash download失败。这个很重要。
在这里插入图片描述
6)最后就进入sram运行了
先选stop/start debug,即右上角图标,再选左上角图标run,就可进入sram中运行程序了,然后再退出debug的界面,跑的程序依旧是sram的程序。当然重新上电后还是原来flash里的程序,在sram中验证程序的目标达到了,完美。
在这里插入图片描述

参考文献

《STM32F4开发指南-库函数版本-V1.2》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值