下载程序到SRAM中进行调试——STM32F103CBT6

1. 在原工程的基础上创建一个调试版本;

2. 添加宏修改STM32的向量表地址;

VECT_TAB_SRAM

3. 修改分散加载文件,使链接器把代码分配到内部SRAM空间;

\(\color{red}{SRAM.sct}\)

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x20000000 0x00009000  {    ; load region size_region
  ER_IROM1 0x20000000 0x00009000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20009000 0x00003000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

设置SRAM的起始地址0x20000000为虚拟ROM的起始地址,然后根据芯片的SRAM大小对其空间进行分配:因为F103RCT6的SRAM为48KB,即0xC000,笔者此次实验将其按3:1分配,即IROM1(虚拟ROM)和IRAM1各自为36KB和12KB,即0x9000和0x3000。

4. 根据使用情况选择是否需要使用仿真器命令脚本文件*.ini;F1系列需要配置

\(\color{red}{Debug\_RAM.ini}\)

/***********************************************************/
/* Debug_RAM.ini: Initialization File for Debugging from Internal RAM         */
/******************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2014 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/*development tools. Nothing else gives you the right to use this software  */
/***************************************************/

FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // 设置栈指针SP,把0x20000000地址中的内容赋值到SP。
PC = _RDWORD(0x20000004); // 设置程序指针PC,把0x20000004地址中的内容赋值到PC。
_WDWORD(0xE000ED08, 0x20000000);  // Setup Vector Table Offset Register
}

LOAD %L INCREMENTAL                    // 下载axf文件到RAM
Setup();                           //调用上面定义的setup函数设置运行环境

//g, main   //跳转到main函数,本示例调试时不需要从main函数执行,注释掉了,程序从启动代码开始执行

5. 修改仿真器和下载器的配置,使程序能通过下载器存储到内部SRAM;

6.配合Debug进行使用

对于F1系列,因为一些未知的原因,需要通过点击debug按钮来设置SP和PC指针的位置,所以需要进入调试,然后点击全速运行。

注意

  1. 断点可以提前打好,运行中途打断点可能出现失败的情况
  2. 切换回FLASH下载程序后,需要rebuild才能正确下载

参考
野火:47. 在SRAM中调试代码

posted @ 2022-03-02 15:00  中庭之园  阅读(714)  评论(0编辑  收藏  举报