单片机学习小组
直播中

山中老虎

8年用户 921经验值
擅长:制造/封装
私信 关注

STM32内部RAM在线调试配置的流程有哪些呢

RAM模式下调试程序优点有哪些呢?
STM32内部RAM在线调试配置的流程有哪些呢?



回帖(1)

王晋

2022-1-24 10:11:19
内容描述:Keil开发工具下,STM32内部RAM在线调试配置方法,以及每一项配置的详细说明。
注:本文章只适用于在线仿真形式,需要使用能够进行在线仿真的调试器(Jlink,Stlink),串口方式不能进行仿真。
RAM模式下调试程序优点:1.调试效率高,能够设置断点,及进行单步调试等。2.程序无需写入芯片FLASH,延长芯片使用寿命,(之前看到过别的文章提到因为调试程序,FLASH频刷会导致芯片出现一些诡异问题)。
适用范围:Cortex-M系列内核芯片,本文章只展示STM32系列单片机的具体操作,其他单片机请参考相应步骤进行差异性操作。
文章作用:1.解决程序不能够在线仿真。2.在线仿真情况下,STM32不能进入中断程序,导致中断不响应。

RAM调试配置流程(开发软件设置)

第一步:修改内存地址
打开目标配置:Project -> Options for Target -> Target或“工程目标配置”点击快捷按钮。
将ROM和RAM地址映射到如下图地址。 我们使用STM32F103ZE芯片,该芯片的RAM大小为0x10000即64KB,我们这里平分RAM,即各自的大小为0x5000。
注意:配置的地址范围不能超过芯片实际的大小,芯片RAM大小请查阅芯片手册获取。

第二步:配置向量表
同上,打开目标配置:Project -> Options for Target -> C/C++,使用宏定义VECT_TAB_SRAM。如下图:

这里的宏定义是为了让向量表指向RAM(我们默认是指向ROM),重要的一个目的就是让中断向量表指向RAM,上面“代码功能”中断的意义就是为了验证向量表的正确性。
注意:这里的宏定义是在工具链中配置的,多个宏定义之间需要有“逗号”隔离开来(英文状态)。
其实这里的宏定义配置也可以在源代码中实现,打开system_stm32f10x.c文件下第127行的“VECT_TAB_SRAM”宏定义,如下图:

第三步:调试配置
同上:Project -> Options for Target -> Debug, 这里是关于调试的配置。
1.去掉“Load Application at Startup”前面的勾选项
2.导入RAM初始化文件(为避免其他问题,RAM.ini文件最好放在工程文件夹下)。
3.parameter等参数设置。

第四步:调试不更新目标程序
同上:Project -> Options for Target -> Utilities,不勾选“更新”。意思就是在线调试时,不更新芯片(下载FLASH)程序。


启动模式设置(硬件设置)


以上两个设置缺一不可,至此,STM32内部RAM在线调试配置方法就完成了,连接开发板就可以使用RAM在线调试代码了。

补充:关于RAM调试模式下不能进入外部中断的解决方法,还可以通过另外一种方式实现,可依据各自习惯选择!
在时钟设置语句中或在main.c初始化语句中加入:    NVIC_SetVectorTable(0x20000000,0x0);
原理是让中断向量表映射到SRAM中。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分