历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2019年01月30日 | 在RAM中调试STM32程序的配置方法

2019-01-30 来源:eefocus

早就听说可以在RAM中调试STM32程序了,直到昨天晚上看了个视频,自己也想来试试。乘热打铁,今天上午跑到实验室,从网上下载资料,凭着零星的记忆开始配置。不过任何事情都不是一次成功的,这次也不意外。But经过反反复复修改,查资料,修改,查资料。还是成功啦!下面就把我配置的一些经验,结合网上已经有的一些资料傻瓜式总结出来,希望所有像我这样的初学者能够少走弯路。。。。。。


先说说在RAM中调试STM32程序的好处吧!


1. 可以单步调试程序,并且不用像仿真调试那样需要去查看繁琐的寄存器位,直接可以通过实验现象来Debug。


2. 避免擦写Flash次数限制,虽然Flash的烧写次数高达1000次以上,但是也经不起小白程序员的折腾呀!!!!!


好了,关键步骤开始了。


一、 硬件配置。


我想大多数的人最开始想到在RAM中调试程序的时候都认为跟BOOT[1:0]有关吧!我也一样,直到我看到一篇博文。

大家可以放心这句话的真实性,我已经试了,确实是与BOOT[1 :0]选择无关。


说了这么多废话,其实就是说不用管硬件配置!!!!!!


二、 软件配置。


1、 准备


(1)将Keil安装目录下:D:\Keil\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky的RAM.ini文件拷贝到需要调试的工程目录下。


(2)在工程目录下新建文件夹Ramout。


(3)修改RAM.ini文件:将红圈处改为“工程名.axf”就行了。如果没有找到该文件不要怕,自己在文本编辑器里面写一个,就几行保存为.ini格式就行了。

2、 IDE软件配置


(1) 单击启动如下对话框,并按照下图配置。

(2) 如果按照上述配置方式配置成功后,KEIL配置模式会变为SRAM。


(3) 单击,按照以下步骤一步一步进行配置。


(4) 


作者Liunus是用的ST公司的STM32F103VC,其Flash是256KB,SRAM 是48KB。记清楚了哟,特别是SRAM大小,这个与后面分配空间有关系。因 为我们将程序也放到SRAM中,所以需要将SRAM分为两个部分;一个部分 用于存放程序代码,另一个部分用于存放程序运行中的数据。


256(KB)=256*1024 (byte) =262144 (byte) 转换为16进制:40000


48(KB)=48*1024(byte)=49152(byte)转换为16进制:C000


所以FLASH的总大小为40000,SRAM总大小为C000。


从CORTEX_M3内核资料我们可以获知,FLASH的起始地址是0x08000000; SRAM的起始地,0x2000000。


(5)


(6)上图是将程序下载到FLASH中,所以Read/Only Memory Areas起始地址是0x800 0000,大小0x4 0000;Read/Write Memory Areas起始地址是0x2000 0000,大小0xC000;但是我们是在SRAM中进行调试,所以需要修改这两个区域,结果如图下图:

至于为什么这样分配,这都是大神们根据自己做项目的经验总结的,我们可以不必深究。不过也很简单,首先SRAM的起始地址是0x2000 0000,Read/Only Memory Areas是从0x2000 0000开始的。根据程序编译结束后生成的报告只要满足Read/Only Memory Areas区大于CODE 加上 RO-DATA;Read/Write Memory Areas区大于 RW-DATA 加上 ZI-DATA就行了。


(7)



(8)如果程序中使用了中断,需要在如图红框中加入VECT_TAB_RAM。因为我目前的工程没有用中断,所以我填入的是RAM_MODE REMAP。其实这里没定义也没有关系,还可以在程序开头定义如:#define VECT_TAB_RAM


(9)

(10)


(11)在Debug标签栏下,点击settings,然后再选择Flash Download出现如下窗口。

(12)


三、 调试程序。


经过上面一系列的配置,我们已经完成95%了。现在我们要做的最后一步就是编译、下载、调试了。But在编译之前,建议大家做以下几步,避免出错。


1、 确保整个建立过程是在SRAM环境下进行的,需检查第(2)步。


2、 确保SRAM大小分配正确,并且认真检查有没有马虎造成的地址大小分配错误,需检查第(6)(9)(11)步。


好啦,可以编译啦。编译通过后,下载,调试。


你就可以像使用仿真工具一样的进行仿真了

下图是运行时的图片,可以看到,程序是在SRAM区。(汇编地址是0x2xxx xxxx)


四、 参考资料


网上有很多好的博客和好的资料,下面推荐几个。Liunus就是通过反复查看资料才配置好的。所以大家在看Liunus资料配置不成功时可以参考网上资料。

推荐阅读

史海拾趣

Burr-Brown公司的发展小趣事

Burr-Brown公司,成立于1956年,初期仅有两名雇员,并得益于房地产开发商的支持。公司起初专注于制造模拟集成电路,第一年的销售总额为1600美元。创始人布朗怀揣雄心壮志,提出在一年内将厂房扩大到1200平方英尺,并期望销售收入能增长到7200美元。随着销售的稳步增长,公司不断迁往更大的设施,最终在1965年购买了附近的机场,为公司未来的成长奠定了坚实的基础。

Evans Capacitor Company公司的发展小趣事

随着市场竞争的加剧,ECC意识到单纯的技术创新已经不足以保持领先地位。因此,公司开始注重产品品质的提升。ECC引入了严格的质量管理体系,从原材料采购到生产流程,再到成品检测,每一个环节都严格把控。这一举措使得ECC的产品质量得到了显著提升,赢得了客户的广泛信任。

CWIND公司的发展小趣事

在激烈的市场竞争中,CWIND公司始终坚持以客户为中心的服务理念。公司建立了完善的客户服务体系,为客户提供从产品咨询、购买到售后服务的全方位支持。同时,公司还注重品牌建设和宣传推广工作。通过加大广告投放力度、举办品牌活动等方式,CWIND逐渐提升了品牌知名度和美誉度。在消费者心中树立起了良好的品牌形象和口碑效应。

Auris公司的发展小趣事

Auris公司的创始人Federic Moll博士,被誉为手术机器人之父。他在2007年创立了Auris Health(原名Auris Surgical Robotics),总部位于美国加利福尼亚州圣卡洛斯。Moll博士此前已经成功创办了多家手术机器人企业,其中最为知名的是上市公司Intuitive Surgical,其达芬奇手术机器人技术已在全球范围内广泛应用。Moll博士的深厚技术背景和丰富的创业经验为Auris的起步奠定了坚实的基础。

Baton Lock公司的发展小趣事

随着公司规模的扩大,Baton Lock意识到单一市场已无法满足其增长需求。于是,公司开始在全球范围内寻找合作伙伴和设立生产基地。通过在欧洲、亚洲等地建立分支机构,Baton Lock成功打开了多个新市场,进一步提升了其品牌影响力。

Anachip公司的发展小趣事

随着国内市场的饱和,Anachip公司开始将目光投向海外市场。公司通过参加国际电子展会、建立海外销售渠道等方式,逐步打开了国际市场。在海外市场,Anachip的产品以其高性能和可靠性赢得了客户的青睐。随着国际化拓展的深入,公司的业绩也实现了快速增长。

问答坊 | AI 解惑

关于EMI/EMC的资料

没有专门的EMI板块,所以就先发这里了…

查看全部问答>

常见的开关柜的结构、型号及选用

1.开关柜的型号识别       机电部于1983年制定了JB/DQ4085开关柜型号编制办法的部标。自此以后开发的新产品按此规定编制型号,使型号管理走上科学化。      开关柜的型号有二种:一种叫产品型号,用字母来代表 ...…

查看全部问答>

可编程帝国的创始人Ross Freeman

作者:裘荟荟 他曾经是一位IC设计工程师,他勇于想象,敢于挑战权威,在他35岁时,他创造出一个改变半导体产业格局的新器件,缔造出一个新的半导体帝国,但41岁时,他英年早逝,将财富、景仰与遗憾留于后人。 他,就是FPGA的发明人了,Ross Freem ...…

查看全部问答>

如何改变键盘的功能

就是外接键盘输入的时候按一个键后键位变换一次,配合VB的界面该怎么设计,谢谢…

查看全部问答>

wince高频率数据采集的问题

我手头有一个A/D采集的模块。这个A/D是外部扩展的A/D(不是2440自带的A/D模块),这个扩展模块有12位的并行数据总线,直接挂在2440的数据总线上面。还有一个开始启动脚,一个转换完成脚,一个读使能脚。它内部没有缓存,也就意味着每转换一次,都要 ...…

查看全部问答>

建议贴--共建ADI实验室电路!让ADI实验室电路更加丰富

7月流火!天气是越来越热了,再有一个星期就是小暑了,也就开始了一年中最热的3伏天了!   在这个“火热”天气里,ADI又给大家的情绪再加了一把火--ADI实验室大赛!     ADI实验室电路DIY大赛正在如火如荼的进行!大家的积极性 ...…

查看全部问答>

sata协议中,链路层基元SYNCp的问题

链路层中有这种规定:SOF之后如果EOF到来之前出现了SYNCp,那么就认定此帧结束,双方进入IDLE,等待下一帧。 问题:硬盘在何种情况下会结束此次帧发送?…

查看全部问答>

带LED典型状态(电池充饱百分比)显示的锂电充电管理/移动电源方案说明

方案概述 本方案广泛应用于手机,MP3,MP4等数码产品充电,5V的电源接入输入端,唤醒MCU,从而进入充电模式,电量由充电IC将电量存储在锂电池中,当有负载插入时,当MCU会检测到有负载接入,则进入放电模式,MCU打开升压IC,把锂电池的电压升高 ...…

查看全部问答>