如何在ram中调试STM32程序 2Word文档下载推荐.docx
- 文档编号:15876048
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:11
- 大小:1.87MB
如何在ram中调试STM32程序 2Word文档下载推荐.docx
《如何在ram中调试STM32程序 2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《如何在ram中调试STM32程序 2Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
本文在参考相关资料并实验探索出如何在盘古STM32开发板上在ram中调试程序,并在其它软件平台上进行了测试。
基本步骤和注意事项如下:
1、新建一个在ram中调试程序的目标(target)命名如RAM并保存
打开一个工程(project),它的窗口的根目录上会显示一个目标(target),本例中命名为key_exti,这个target通常是设计在flash中调试的。
在原有的target的基础上,新建一个欲在ram中调试的目标文件夹例如RAM,步骤见图1、图2,右键单击原来的目标,在弹出的菜单中选择ManageProjectItem选项,弹出如图2的对话框,新建一个取名如RAM的目标,点击OK保存,然后再按图1显示的方法选择RAM目标,RAM目标所包含的文件基本引用原来的程序文件,只是配置不同。
注意我们后来的步骤大部分都是在RAM目标中操作。
图1打开工程,准备新建一个target
图2新建一个target取名RAM
2、ram调试目标(target)的设置与配置
按照图3的方法:
从RAM的右键菜单中选择Optionfortarget‘RAM’(或者从工具栏“魔术棒”按钮),进入目标选项配置对话框。
注意工程还是一样,只是这个目标的命名为RAM。
我们希望它的程序能在ram中运行。
接下来我们需要在编译软件中对RAM的各个标签页进行配置,这些配置的作用是芯片的选择,ram分割(一部分分给原来装在flash中的程序代码,另一部分仍然当做ram装数据),C/C++编译宏定义的选择,编写RAM.ini指定程序的运行地址。
Debug调试的设置,程序的编译和写入ram。
其中的过程比较多,需要我们一步一步去做,下面把它分成9小步:
图3进入RAM目标的选项配置
1、Device标签页的设置
按照图4的方法,对Device标签页进行设置,点击图中的Device标签,选中此页。
点选你所使用的芯片,例如STM32F103RB,暂且不要点击OK,可以接着对后面所有的标签页进行设置,也就是等到后面的2~9步设置好后,再点击OK,遇到非点OK不行的话,那就点它,又按图3的办法进入Optionfortarget‘RAM’(RAM目标的选项配置)页面。
还有一点2~9步的步骤可以优化,可以将第5、6、9步放到最后,先按顺序完成其它步骤,本文是按标签页顺序描述的步骤。
图4Device标签页的设置
2、ram的分割
选择Target选项,会显示出ROM的起始地址、大小,RAM的起始地址、大小。
如图5底部。
由于我们要将程序写入RAM中调试,这就需要我们将原来RAM分割成两部分,一部分当做ROM用,剩余部分仍然用作RAM,方法见图5:
第一步将ROM的起始地址改为RAM的起始地址,例如将原来ROM的起始地址从0x8000000改为0x20000000,第二步将原来的RAM的大小分成大小两份,一份用来装程序,一份用来装数据。
例如把0x005000即20k的RAM分成0x3000和0x2000两份,填入该对话框中的相应部分,第三步别忘了RAM的起始地址由于让出去一部分变为0x20000000+0x3000。
图5ram的分割
3、输出Output标签页的设置
选择Output标签页,见图6:
检查CreateHEXFile复选框是否钩上,NameofExecutable中文件名可以保持不变。
点选SelectFolderforObjects会弹出对话框,见图7。
新建一个文件夹,取名如RAMOUT并用来保存RAM目标的生成的HEX文件。
防止原来的HEX文件被覆盖。
Listing标签页比较简单,也会遇到一个SelectFolderforListings按钮,点选它并将刚才新建的RAMOUT文件夹配给它。
用来保存*.lst文件。
图6目标Output标签页的配置
图7建立一个保存HEX的文件夹命名如RAMOUT
4、User,Asm,Linker标签页的配置
这几个标签页的配置保持默认配置,不需要修改。
5、C/C++标签页的设置
打开工程文件中的CMSIS文件夹下的c语言文件system_stm32f10x.c,见图8,找到中断向量表偏移地址定义项中的宏定义选项如:
VECT_TAB_SRAM(有些开发平台的宏定义在某个系统文件里,如SYS.c里面名字稍微不同),这个选项的作用是:
如果选了这个宏定义,就把中断向量表偏移地址设在RAM当中。
让这个宏定义起作用的办法是在C/C++标签页的设置中把它填入Define选项中,注意之前加上英文的‘,’号,不是句号!
见图9。
图8在C文件中找到中断向量表偏移地址宏定义VECT_TAB_SRAM
图9将中断向量表偏移地址宏定义填入Define选项中
6、ram.ini文件的编写
接下来我们需要编写RAM.ini文件,在工具栏中点击新建文件按钮如图10,在uVision软件的工作区会出现一个空白文件Text1。
在文件中写入如下内容:
FUNCvoidSetup(void){
SP=_RDWORD(0x20000000);
//SetupStackPointer
PC=_RDWORD(0x20000004);
//SetupProgramCounter
//_WDWORD(0x700076,0x20000000);
//SetupVectorTableOffsetRegister
}
//LOADRAM\Blinky.axfINCREMENTAL//Download
Setup();
//SetupforRunning
//g,main
上面的SP=_RDWORD(0x20000000);
这条语句指定SP,PC=_RDWORD(0x20000004);
指定PC的值,即从这里运行程序。
这条语句指定调用这个函数。
被注释掉的几条语句可以不用。
然后右键单击Text1弹出菜单,选择close,接下来它会弹出一个对话框,你将这个文件命名为例如RAM.ini,保存在工程文件里以备下一步运用。
图10RAM.ini文件的编写与保存
7、debug标签页的修改
打开Debug标签页,见图11。
单选右边的Use选择硬件调试,通过下拉菜单选择你所用的调试器,例如JLINK,点击Settings按钮对Debug参数的设置放到后面。
再勾选Runtomain(),然后点选Edit旁边的按钮...,选择文件路径打开上一步编写好的RAM.ini文件。
Edit按钮可以对它进行编辑。
最后点选Settings按钮对Debug参数的设置。
它会弹出一个Debug参数的设置标签页。
选中FlashDownload标签页对它进行设置:
勾选RestandRun,在RAM
foralgorithm(RAM地址的算法)中将RAM的起始地址修改为ram分割后的起始地址0x20000000+0x003000,size要小于分割后RAM的大小。
最后点选Add按钮,选择你所应用的芯片并将其选中。
修改编程地址算法(Programmingalgorithm)的起始地址和大小,应该引用前面步骤的ROM起始地址和大小,然后选中所应用的芯片,点击确定。
图11Debug标签页的设置
图12FlashDownload标签页的设置
图13Utilities标签页的设置
8、Utilities标签页的设置
选择Utilities标签页,如图13。
去掉UseDebugDriver的钩选,选择你所使用的调试硬件的类型,例如JLINK,然后点击Settings设置。
选中你所使用的芯片类型,点击下面的OK。
如图14.
图14Utilities的设置
9、保存配置
点击总标签页Optionfortarget‘RAM’下面的OK按键,参见图4。
对上面所有的配置进行保存。
3、编译并在RAM中调试程序
在所有的Optionfortarget设置完成并保存后,启动图15的Build按钮或者F7快捷键编译RAM目标。
检查有没有错误,没错误就按d按钮将程序写入RAM中运行,如果程序运行正常,断开开发板的电源后,程序丢失,这就说明在RAM中调试程序成功。
4、注意事项
如果程序在Flash中能运行成功,但在RAM中不能运行,请你注意图5中的BuildOutput中程序的大小(Programsize):
Code的大小不能超过你把RAM分给ROM的大小,并且RO-data,RW-data,ZI-data之和不能超过分割后的大小,否则编译器会报错,例如:
.\RAMOUT\lcd.axf:
Error:
L6406E:
Nospaceinexecutionregionswith.ANYselectormatchingltk_debug.o(.text).。
这种情况,你可以有三项选择:
一、就在Flash中调试程序。
二、更换RAM容量更大的SMT芯片(这个不容易,几乎就是更换开发板)。
三、大幅度精简代码(这个也不容易,几乎就是更换开发平台)。
图15编译并在RAM中调试程序
5、结束语
在玩STM32开发板的过程中,遇到在RAM中调试程序的问题,在网上也有很多这方面的资料。
但是说的不够详细。
而RAM中调试程序的设置步骤是很复杂的,本人在总结各种资料的情况下,首先在盘古STM32开发板上通过实验,写成了本文。
并利用源享科技学习开发板软件平台上、ALIENTEK战舰STM32开发板软件平台上进行了测试,均获得成功。
谨以此文献给广大STM32的爱好者学习交流。
【参考文献】:
1、刘凯老师STM32视频教程以及配套资料
2、ALIENTEK战舰STM32光盘资料
3、盘古STM32开发板配套资料
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何在ram中调试STM32程序 如何 ram 调试 STM32 程序