- UID
- 1029342
- 性别
- 男
|
今天调试STM32的一个例程时时遇到一个非常奇怪的现象,就是程序可以仿真,但是并没有真正下载到芯片中,每次复位之后都是以前的程序,我非常奇怪,查看MDK的设置,发现程序烧入的地址和之前的程序不太相同,我怀疑是烧写地址有问题,就改到以前烧写程序的地址中,但仿真程序的时候竟然发现有error。上网搜也没有搜到答案。
最后我想到是不是调试的方式和以前不同。我记起仿真可以在flash中,也可以在RAM中,我以前在flash中仿真,程序下载到flash中,所以复位后仍然可以运行程序,但在RAM中仿真的话程序不会下载进去,故复位后运行的程序还是之前的,因为flash中的程序并没有改变。
我查了一下,发现STM32f103VC的RAM起始地址为0x20000000,48k,flash的起始地址为0x4002 2000,256k,果然和我想的一样。
查找了DX32顶级学习手册,发现如下方法设置在RAM中调试,非常方便。
下面转一篇电子白菜关于RAM中调试相关的文章。
转:
.MDK J-LINK STM32 RAM .
(这个在RAM调试方式经历了一些大虾的精简操作,在2009 年10月8 日改为以下版本)
STM32 支持程序在FLASH 上调试,并且用J-LINK 的话,可以设置无数断点.但似乎大家都
对下载代码到FLASH上感到心痛(都担心FLASH下载过多就烧坏了呵呵)于是就有了这一
节,在RAM 调试了.
DX32 上用的是103VC 芯片,有48K 的 RAM,对于一般学习型的代码来说,分出40K 走程
序,8K作RAM,那已经是相当的足够了.至少光盘上的例程,除了实用篇的部分超级例程外,
剩下的都可以在那48K RAM 内调试.
在进行调试前,得先教大家如何在同一个工程内搞出两种不同配置的目标项出来.也就
是说,工程是同样的工程,代码是同样的代码,但通过简单的设置,就可以让他们选择在
RAM 运行还是在FLASH 运行,也可以让这些代码有不同的优化等级和可以使用不同的仿
真器等的功能.
sanhope , lhzw2001
, , , ” ”
, RAM , .
DX32 , , J
看下图,假设你本来的工程目标名叫STM32F103VC Flash,那么就Manage Components:
出现下图,下图就是你的项目管理了,在目标栏目建立一个新的目标,名字叫
STM32F103VC RAM,然后点击这个STM32F103VC RAM,按下下面的那个Set as Current
Target 按键
如此,你再看看你的工程栏目,就已经不再是之前的那个STM32F103VC Flash 了,而是你
刚才建立的那个STM32F103VC RAM.当然,这些名字都是随意改的啦,只是方便大家了解
而已.
然后还记得那个魔术棒么?现在要开始用它来变魔术了:
如何设置MDK,在之前已经说过了,
这里只说一下特别要设置的地方,首先是下面的界面,看看已经被圈出来的地方,是不是
跟以前有点不同呢? |
|