STM32在Keil MDK5环境下RAM上代码调试

 

步骤与图示:

1.先给个CPU的数据,需要注意的是三个红圈的地方,架构,型号,FlashSRAM大小如图1

 STM32在Keil MDK5环境下RAM上代码调试_第1张图片

 


(STM32F107VC 256KB FLASH,64KB SRAM)

1

 

2.Target的设置

 

1)勾上可以用微库,减小生成代码的大小

23)分别定义ROM区位置及大小和RAM区位置和大小。在这里需要说明的是,Cortex-M3的架构有4G的寻址空间,而Flash的起始地址在0x08000000RAM地址在0x20000000,在这里进行了第一次相关地址的更改;如图2

0x10004K,这里的0xc000则为48KROM分配;RAM的为16K;基本上移植个uCOS-II都够用了

 STM32在Keil MDK5环境下RAM上代码调试_第2张图片


 

2

3.Output的设置

 选择Remout文件夹

 

强调一下Name of Executable;这里默认的应该是project的名字,改成output;而且这与编译后产生的*.axf*.sct文件名字都有关联;没勾选HEX;见图3

 STM32在Keil MDK5环境下RAM上代码调试_第3张图片

 


3

 

4.Listing Label  默认

5.User Label  默认

6.C/C++ Label  默认

7. Asm Label  默认

8. Linker Label

最上边打上勾,是这效果;不打勾,就反白了

先说说打勾的时候,如图4;非人为操作,你什么都不用管了,(很多人会发现,新建的项目,刚开始的时候下面的Scatter File后的内容是空的,当你把这勾去掉后会自动出现,然后随你勾与不勾,就都是存在的了,不过此时还只是个影子,没有实际的文件,什么时候出现这个文件呢,法一:自然你可以自己写;法二:在出现影子后打上勾编译一次,此文件就产生了;output的文件夹里;马上后文还会有对此文件内容的介绍)

 STM32在Keil MDK5环境下RAM上代码调试_第4张图片



4

再说说不打勾的时候会反白一些内容,如图5,需要修改两个地方

 STM32在Keil MDK5环境下RAM上代码调试_第5张图片

 

5

再来看看output.sct文件内容,如图6~6行内容是ROM的地址和大小,11行事RAM的地址和大小,很是一目了然,内容根据Target自动生成的,不需要手动修改

 

 STM32在Keil MDK5环境下RAM上代码调试_第6张图片


6


LR_IROM1 0x20000000 0x0000C000  {    ;load region size_region

 ER_IROM1 0x20000000 0x0000C000 {  ;load address = executionaddress

  *.o (RESET, +First)

  *(InRoot$$Sections)

  .ANY (+RO)

  }

 RW_IRAM1 0x2000C000 0x00004000 {  ;RW date

  .ANY (+RW +ZI )

  }

}

9.Debug的配置

分成几部分,原界面和Setting界面

1)原界面,如图7,首先选好J-link ,keil5,选择“CMSIS-DAP Debugger”,取消Load Application at Startup的勾选

 STM32在Keil MDK5环境下RAM上代码调试_第7张图片

 

7

再说说这个RAM.ini文件,内容如下,如图8,有注释

首先LOAD output.axf,加载启动代码到RAM,关关于hexbin文件和axf的关系,是在axf中存有Debug需要的一些调试语句,所以这文件与前 2者内容上是不相同的,前两者属于其子集的关系,(这里的output.axf名字对应了我们上边设定的output的文件名设定,此文件在output中设定的文件夹下生成,output.sct在一起)从文件内容可以看到,中断向量表已经被映射到0x20000000PC也指向了 0x20000004,说明在RAM中进行调试时理论上可以的了

 STM32在Keil MDK5环境下RAM上代码调试_第8张图片

8

 RAM.INI文件:

 /******************************************************************************/

/* RAM.INI: RAM Initialization File                                           */

/******************************************************************************/

/* This file is part of the uVision/ARMdevelopment tools.                    */

/* Copyright (c) 2010 Keil - An ARMCompany. All rights reserved.            */

/* This software may only be used under theterms of a valid, current,        */

/* end user licence from KEIL for acompatible version of KEIL software      */

/* development tools. Nothing else givesyou the right to use this software.  */

/******************************************************************************/

 

FUNC void Setup (void) {

  SP= _RDWORD(0x20000000);          // SetupStack Pointer

  PC= _RDWORD(0x20000004);          // SetupProgram Counter

 _WDWORD(0xE000ED08, 0x20000000);  // Setup Vector Table Offset Register

}

 

LOAD ..\Remout\Project.axf INCREMENTAL                  //Download

 

Setup();                             // Setup forRunning

 

g, main

 

  STM32在Keil MDK5环境下RAM上代码调试_第9张图片

 

2)进入setting如图9

 STM32在Keil MDK5环境下RAM上代码调试_第10张图片


9

3)然后进入了Flash Download label,如图10~Flash的擦写有规矩,需要在有内容的情况下擦出一个扇区后方可写入,而此时的RAM自然不必要这样做,然后需要点击add添加Flash编程算法接着进入了选择界面,如图11

STM32在Keil MDK5环境下RAM上代码调试_第11张图片


10

在这里选择好属于自己的芯片Flash大小~256K ~

add后还需要再更改最后一行红线上的内容,此时需要先点一下刚选好的变成算法就会反白可编辑,然后编程算法会自动更改其自身的地址

 STM32在Keil MDK5环境下RAM上代码调试_第12张图片




11

10.进入Utilities~Debug一样,选择其中的setting其实刚刚讲过,其实是同一个,如图12

 STM32在Keil MDK5环境下RAM上代码调试_第13张图片

12

RAM调制到此为止

需要提醒大家注意的几点是:

1.Debug开始后~不要点reset~因为这样后走的就是Flash的程序了~容易造成调试问题~结果是产生keilkill掉的PC错误~

2.重新启动开发板后一定要build target一次~或者rebuild all一次再烧写程序~不然~很容易同上

你可能感兴趣的:(stm32)