基于固件库的STM32F10x程序在Keil v5 MDK 下的RAM调试方法

本文详细介绍了如何在Keil v5 MDK环境下,对基于STM32F10x的固件库程序进行RAM调试。通过修改工程设置,包括分配RAM和Flash空间、更改中间文件和链接文件路径、添加宏定义等步骤,使得调试过程更加高效。同时,文章强调了RAM调试的优势以及注意事项,如不能直接下载和复位后需重新进入Debug模式。


为什么要RAM调试?

  1. 相比于FLASH调试,在RAM调试可以很快地装载代码,可以节省将代码下载到Flash的时间。

  2. RAM的擦写次数几乎无限,RAM调试可延长Flash的使用寿命。图1


一、准备(这里以STM32F103C8LED流水灯程序为例)

  1. Keil mdk514

  2. Template模板工程 LED流水灯,V3.5.0版本的固件库

  3. 示例芯片型号:STM32F103C8芯片的BOOT引脚必须接地

 二、修改工程:打开Keil mdk工程,修改以下设置

   1.添加一个Project target

   如图1左Project视图中右键Template_Flash选择Manage Project Items…出现工程文件管理界面。


                       

图1 :左为project视图,右为工程项管理界面 

   在弹出的工程文件管理界面作图1右图所示的设置:(1)单击添加按钮;(2)输入Target名称,如Template_RAM(3)单击Set as Current Target按钮,然后按ok保存。

   这样做的好处是:可以使用下载按钮旁边的下拉列表切换用于Flash下载的配置和进行RAM调试的配置,如图2。


图2 :编译目标选择下拉框

   2.分配RAMFlash空间:

     由《STM32数据手册》得知,STM32F103C8RAM大小为20K,根据自己索要调试的代码分配者20K的空间;

     例如:如图3是流水灯程序编译后的keil输出,流水灯程序占Flash1352字节,占RAM268+24+1632,那么可以将STM32F103C820KRAM10kROM,剩下10k作为RAM

图3:流水灯程序Build Output

    单击keil工具栏中的魔术棒按钮如图4(Options for Target…)弹出工程选项窗口:

图4 :工程选项Options forTarget按钮

     修改工程选项的Target标签的IROMIRAM如图5。设置IROMStart=0x20000000Size=0x28000x2800=10k);IRAMStart=0x20002800Size=0x2800。

图5 :工程选项-Target标签设置


    为何这样设置?

    答:下图来自《Cortex-M3权威指南(中文)》84页,据图5.1知Cortex-M3内核MCU内部RAM起始地址为0x20000000,因为STM32F103C8的内部RAM=20K,因此地址范围是:0x20000000~0x20005000。这样上述设置将10k分给的代码区(IROM),将10k分给了数据区(IRAM)。

  3.修改中间文件和链接文件保存路径:(文件路径跟别的Target不同即可)

     如图6,打开选项的Output标签,将objects文件的保存路径改为工程目录/OBJ/RAM目录下;同理,选项的Listing标签中,将lst文件的保存路径改为工程目录/LIST/RAM目录下;

图6:工程选项-Output标签设置

     目的是:避免二、1步中所示的不同配置的Target产生的中间文件和链接文件混淆。

   4.添加宏定义:

    在选项的C/C++标签的Preprocessor Symbolsdefine中添加定义:VECT_TAB_SRAM,若有别的定义,则用英文逗号隔开。

图7:工程选项-C/C++标签设置

   5.清除flash编程算法以及添加初始化文件:

  (1)在选项的BEBUG标签中选择右侧的仿真器如Jlink,图8左

图8 :左 工程选项-Debug标签 ;右 单击左图Setting弹出的仿真器设置界面

     然后单击右边的Settings按钮:弹出如图8右图所示设置页,选择Flash download标签,设置如下:直到将Programming Algorithm中的内容清空。选项的Utilities标签也有一个Setting按钮,里面的设置同理。

  (2)在选项的BEBUG标签中选择右侧的仿真器选择下方有一个Initialization File,添加Dbg_RAM.ini文件;

    说明Dbg_RAM.ini文件来自Keil安装目录\ARM\Pack\Keil\STM32F1xx_DFP\1.1.0\Boards\Keil\MCBSTM32C\Blinky\Dbg_RAM.ini,将其复制到工程目录的USER子目录下;不同版本Keil该文件路径可能不同。该文件可手动创建,容如下:

FUNC void Setup (void) {
  SP = _RDWORD(0x20000000);          // Setup Stack Pointer
  PC = _RDWORD(0x20000004);          // Setup Program Counter
  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
}
FUNC void OnResetExec (void)  {      // executes upon software RESET
  Setup();                           // Setup for Running
}
load %L incremental
Setup();                             // Setup for Running
g, main

   6.最后的设置选项的Utilities标签的 Update Target Before DeBugging项不能选中!

图9:工程选项-Utilities标签

   上述设置完成后,注意单击ok保存设置。


三、enjoy程序调试:

    重新编译项目文件,单击keil工具栏中的Bebug按钮就可以在RAM中调试程序。


 注意:

         1.RAM调试Target不能用于下载,因此不能单击下载按钮;

       2.调试过程中复位后必须退出Debug再重新进入Debug。原因是复位后程序回到了芯片flash的起始地址而非RAM起始地址。

      3.若进入debug程序立即运行,可先在main函数或需要的地方加好断点,或者取消图8工程选项-Debug标签所示的Run to main().选项  为什么是取消勾选??不得而知。

RAM调试工程模板下载:

http://download.csdn.net/detail/weboo10000/9085393

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值