你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在cubeide中,设置成从SRAM启动程序

[复制链接]
stm32gxx 发布时间:2020-9-23 20:17
STM32 MCU支持多种启动方式,在调试过程中,有时需要配置从SRAM启动,以避免总是擦除flash,影响寿命,网络上主要针对keil IDE做出很多攻略,在cubeide怎么实现一样功能的配置方法,根据自己的摸索,分享出来,希望能帮到需要的朋友。关于启动过程的详解网络上有很多资料,此处不做赘述。实现SRAM的几个关键点,以Nucleo-G474RE开发板每隔1s toggle io管脚闪LED灯为例。
(1)MCU boot配置要正确,否则,debug 重新reset后程序会跑飞,因为找不到正确的入口
(2)要选用正确的链接脚本,创建工程时,会有2个ld后缀的链接脚本,分别对应于从flash启动和sram启动的脚本,有兴趣可以对比两个文件看看区别
(3)编译时要define VECT_TAB_SRAM
(4)debug config设置正确的程序PC。
下面结合一下截图说明一下具体的操作和分析。创建2个一样的工程,在
(a) c/c++ build中分别选不同的linker script,一个工程是STM32G474RETX_RAM.ld,另一个选STM32G474RETX_FLASH.ld
(b) gnu gcc compiler增加VECT_TAB_SRAM,编译两个工程,比较两个lst的文件,可以看出区别,固件的地址空间一个在flash+sram,另一个全在sram中。
(c) 从SRAM启动的工程还需在debug configuration的startup中填入specify vector table 0x20000000
通过以上三点,就可以从sram启动程序。
容易出错的几点说明
(d)在从SRAM启动的工程中,如果没有设置define vect_tab_sram的话,程序在运行到hal_delay时会出错,因为它没有把中断向量表放到sram中
(e)如果mcu的boot启动方式设置是flash启动,先把flash擦除后,用sram启动的工程调试,第一次debug可以,再次用debug reset后,程序会报错地址0xfffffff9 0xfffffffe,因为再次启动flash没有程序,无法定位,启动不了
(f)如果mcu的boot启动方式设置是flash启动,flash中有程序,用sram启动的工程调试,第一次debug可以,再次用debug reset后,程序会运行报错,因为此时会从flash启动代码,但是不对,会运行部分代码,然后在无效机器码的地址停下来
(g)如果mcu的boot启动方式设置是sram启动,用flash启动的工程调试,再次用debug reset后,程序会运行报错地址0xfffffff9



Snipaste_2020-09-27_08-31-44.png
Snipaste_2020-09-27_08-37-35.png
Snipaste_2020-09-27_08-45-17.png
Snipaste_2020-09-27_08-42-21.png

bootframflash.zip

下载

7.78 MB, 下载次数: 7

bootframsram.zip

下载

7.78 MB, 下载次数: 7

收藏 评论1 发布时间:2020-9-23 20:17

举报

1个回答
mojielss 回答时间:2020-9-29 16:16:34
你好,想问下这种方法只能用做调试时从SRAM启动,掉电后程序就丢失了。STM32CUBEIDE有没有哪里可以配置上电后先将代码从flash拷贝到ram中再运行

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版