工控论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 0|回复: 0

STM32从内部RAM启动编译设置

[复制链接]

194

主题

197

帖子

24

积分

初级会员

Rank: 2

工控币
24
发表于 2020-5-20 02:06:58 | 显示全部楼层 |阅读模式
搞了几天,终于从内部RAM启动了,我借用了网上一篇文章,在此向原作者致敬。
原作的设置,不完全适用我的环境,我作了一些改动。
本文基础是原作者的,也加入了我的设置。
文中的图片,没能贴上来,我把本文一并压缩,可以下载打开看个仔细。


STM32内部RAM在线调试配置方法及详细说明
写在前面
本文主要讲述的内容:基于Keil开发工具下,STM32内部RAM在线调试配置方法,以及每一项配置的详细说明。
让程序运行在RAM中调试代码有两优点:1.速度快;2.减少对芯片FLASH读写次数,增加芯片寿命。
本文基于ST公司Cortex-M内核的STM32来讲述其配置方法,其实也适用于其他公司(如:TI、NXP等)的Cortex-M芯片,原理都是一样的。
第二点在本文中的作用也很大,就是使用了中断功能。由于RAM调试会牵涉到向量表,中断功能就会使用到向量表,如果没有配置正确,这里就不会响应中断,或者出错。
RAM调试配置方法
本节主要讲述配置方法的过程,为什么这么配置,以及配置的原理将会在下一章节讲述。
1.修改内存地址
打开目标配置:Project -> Options for Target -> Target或“工程目标配置”点击快捷按钮。
将ROM和RAM地址映射到如下图地址。
我们使用STM32F103ZE芯片,该芯片的RAM大小为0x10000即64KB,我们这里平分RAM,即各自的大小为0x5000。
注意:配置的地址范围不能超过芯片实际的大小。
195628ah40we4ritrz56ms.png

2.配置向量表
同上,打开目标配置:Project -> Options for Target -> C/C++,使用宏定义VECT_TAB_SRAM。如下图:
195656kses6gzhs1uysasz.png

这里的宏定义是为了让向量表指向RAM(我们默认是指向ROM),重要的一个目的就是让中断向量表指向RAM,上面“代码功能”中断的意义就是为了验证向量表的正确性。

注意:这里的宏定义是在工具链中配置的,多个宏定义之间需要有“逗号”隔离开来。

其实这里的宏定义配置也可以在源代码中实现,打开system_stm32f10x.c文件下第127行的“VECT_TAB_SRAM”宏定义,如下图:
195731tegiiufnlphijjke.png
3.调试配置
同上:Project -> Options for Target -> Debug, 这里是关于调试的配置。
第一步:去掉“Load Application at Startup”前面的勾选项
导入RAM初始化文件。
195750reebd1kkkp591ley.png
RAM初始化文件里面内容如下:
FUNC void Setup (void) {
SP = _RDWORD(0x20000000);
PC = _RDWORD(0x20000004);
_WDWORD(0xE000ED08, 0x20000000);
}

LOAD Objects\ExecutableFile.axf INCREMENTAL
Setup();
g, main

每一条语句具体意思请见源代码注释,这里提示的是Objects\ExecutableFile.axf

也就是输出路径和输出文件名,它的路径与文件名与你工程配置需对应。
第二步:调试不更新目标程序
同上:Project -> Options for Target -> Utilities,不勾选“更新”。意思就是在线调试时,不更新芯片(下载FLASH)程序。


第三步:改右边上RAM for algonthm  改右边下Start: (同修改内存地址)
单选“Do not Erase”
195825vehphwum9jpggw1h.png


第四步:
在LinKer 中,不勾Use Memory Layoutfrom Target Dialog(才能改)
改R/O Base= 0x2000 0000  R/W Base=0x20005000(同修改内存地址)
勾上Use Memory Layout from Target Dialog(不再改了)


至此,STM32内部RAM在线调试配置方法就完成了,连接开发板,重新编译后,跳线设置BOOT0=1 ,BOOT1=0 ,就可以使用RAM在线调试代码了
试验结果:
1、只能在调试环境中使用,非调试环境,无论BOOT如何设置,都不能运行RAM。
2、不断电,下次进入本例程调试环境,依然可以运行,不需要再写入,说明程序在内存中。
(原来写在FLASH中的程序不使用20000000-20005000这一段,避免破坏本程序)
蜂鸣器RAM启动测试代码.zip  [预览压缩包] (506.68 KB, 售价: 1 工控币)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

免责声明: 工控技术网(www.eleok.com)所有内容均为网友自行发布,不代表网站立场。如有版权纠纷,请联系本站删除:1370723259@qq.com

QQ|小黑屋|手机版|工控技术网 |网站地图

GMT+8, 2020-8-10 06:57

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表