ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[应用相关] JILNKV8或STLINKV2在STM32 RAM 中调试

[复制链接]
741|29
 楼主 | 2018-3-13 08:58 | 显示全部楼层 |阅读模式
JILNKV8或STLINKV2在STM32 RAM 中调试
这个文档是我在百度文库下载下来的,有些地方我做了补充和说明,把我在调试中的问题和建议记录下来。
才学习STM32没多久,前段时间在贴吧哪位好人贡献的刘凯老师的视频里第二十五集讲到了SRAM调试,前段时间就在淘宝买了个STlinkV2,没想到就用了一次就坏了,就又买了一个,这个倒是好的可自己太菜,用STlinkV2没有在SRAM上调试出来,并且只有MDK4.60以上才支持STlinkV2调试,哎,刚好同学买ARM板子,就让他帮忙带了个JlinkV8,昨晚才到,今早就早早跑到实验室试验下JlinkV8是不是好的,顺带进行SRAM调试。不过任何事情都不是一次成功的,这次也不意外。But 经过反反复复修改,查资料,修改,查资料。还是成功啦!下面就把我配置的一些经验,结合网上已经有的一些资料傻瓜式总结出来,
希望所有像我这样的初学者能够少走弯路。。。。。。
 楼主 | 2018-3-13 08:58 | 显示全部楼层
先说说在 RAM 中调试 STM32 程序的好处吧!
1. 可以单步调试程序,并且不用像仿真调试那样需要手动调出寄存器窗口查看繁琐的
寄存器位,直接可以通过实验现象来 Debug。
2. 避免擦写 Flash 次数限制,虽然 Flash的烧写次数高达 1000 次以上,但是也经不起
小白程序员的折腾呀!
 楼主 | 2018-3-13 08:59 | 显示全部楼层
这个问题,其实从STM32各个型号的datasheet就可以看出来.
对比了几个文档之后,我发现STM32F10x系列的不同型号,他们的最少擦写寿命不一样.仔细对比了下,原来是版本的问题.在老版本中,写的内容如下:
 楼主 | 2018-3-13 08:59 | 显示全部楼层
照片1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 08:59 | 显示全部楼层
这是老版本的表述,就说最少是1K次,典型的是10K次.而后面的新版本,其内容如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:00 | 显示全部楼层
新版本的把最少次数改为了10K次,这样的话,我们可以认为STM32的FLASH擦写周期在1W次左右.所以大家可以算算,每天擦写100次,那么需要100天.但是你能每天刷100次么?除非你想测试STM32的flash寿命,呵呵.否则,顶多就是30次的样子.这样算来,每天擦30次,从不间断,能用一年左右. 但是你能一年平均每天都擦30次么?
好吧,看到这或许你就大概对STM32flash的擦写次数就有了解了吧,如果你是个有折腾心或是非常爱惜你的板子,那就继续看下去。
一、硬件配置。
我想大多数的人最开始想到在 RAM 中调试程序的时候都认为跟 BOOT[1:0]有关
吧!我也一样,直到我看到一篇博文。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:01 | 显示全部楼层
大家可以放心这句话的真实性,我已经试了,确实是与 BOOT[1 :0]选择无关。
说了这么多废话,其实就是说不用管硬件配置!!!!!!

·························································································

二、软件配置。
1、 准备
(1)首先最好是已经准备好一个能够进行 Flash 下载的工程。
(2)将 Keil 安装目录下:X:\Keil\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky 的
Dbg_RAM.ini(老版的这个文件可能是RAM.ini)文件拷贝到需要调试的工程目录下。(X表示你的安装目录,每个人的安装目录可能都不一样)
(3) 如果你文件目录下是 Dbg_RAM.ini,那么你就不用下面这步了,如果你是RAM.ini,那就要下面这步设置。
(4)修改 RAM.ini 文件:将红圈处改为“工程名.axf”就行了。如果没有找到该
文件不要怕,自己在文本编辑器里面写一个,就几行保存为.ini 格式就行了。
 楼主 | 2018-3-13 09:02 | 显示全部楼层
照片4

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:02 | 显示全部楼层
(4)在工程目录下新建文件夹 Ramout。Ramout 用于存放在 SRAM Target 下的输
出文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:03 | 显示全部楼层
2、 IDE 软件配置,我用的是Keil4。
(1) 单击
启动如下对话框,并按照下图配置。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:03 | 显示全部楼层
(2) 如果按照上述配置方式配置成功后,KEIL 配置模式会变为 SRAM。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:04 | 显示全部楼层
(3) 单击按照以下步骤一步一步进行配置,Deviece目录下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:04 | 显示全部楼层
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。
 楼主 | 2018-3-13 09:04 | 显示全部楼层
(5)Target目录下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:05 | 显示全部楼层
(6)上图是将程序下载到 FLASH 中,所以 Read/Onl y Memory Areas 起始地址是
0x800 0000,大小 0x4 0000;Read/WriteMemory Areas 起始地址是 0x2000 0000,
大小 0xC000;但是我们是在 SRAM 中进行调试,需要手动将 SRAM 区分为两部
分,一部分用于存放程序代码(Read/Only Memory Areas),一部分用于存放数据
(Read/Write Memory Areas)。所以需要修改这两个区域,结果如图下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:05 | 显示全部楼层
至于为什么这样分配,这都是大神们根据自己做项目的经验总结的,我们可以不必深究。不过也很简单,首先 SRAM 的起始地址是 0x2000 0000,Read/OnlyMemory Areas 是从 0x2000 0000 开始的。至于分配大小,根据程序编译结束后生成的报告 只要 满足 Read/Only Memory Areas 区大于CODE加上RO-DATA ;Read/WriteMemory Areas 区大于RW-DATA加上ZI-DATA 就行了。还有就是给程序分配的空间尽可能大点,给RAM的可以小点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:08 | 显示全部楼层
(7)Output目录下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:09 | 显示全部楼层
(8)C/C++目录下
 楼主 | 2018-3-13 09:09 | 显示全部楼层
图片如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主 | 2018-3-13 09:10 | 显示全部楼层
可能上面的图片不是太清晰,红色方框中是RAM_MODE REMAP,后面那个是VECT_TAB_RAM

(9)Linker目录下
下面这步我试了下可有可无,做了也没有什么影响

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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