单片机学习小组
登录
直播中
山中老虎
8年用户
921经验值
擅长:制造/封装
私信
关注
STM32内部RAM在线调试配置的流程有哪些呢
开启该帖子的消息推送
单片机
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中。
内容描述: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中。
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
STM32
RAM
在
stm32
f407
内部
SRAM是怎样
调试
程序的
呢
2021-10-18
1753
TMS570系列怎么设置在
ram
下
在线
调试
?
2018-05-25
2902
STM32
的
调试
流程
有
哪些
2021-10-11
736
stm32
f103C8T6的基本
配置
流程
是怎样的
呢
2021-12-15
1948
在
RAM
中
调试
代码的优点缺点是什么?
2021-11-29
1891
怎样通过IAP来对
STM32
进行
在线
升级
呢
2021-11-30
967
STM32
如何在SRAM中
调试
代码?
2021-09-29
766
如何去实现
STM32
f103c8t6的IAP
在线
升级
呢
2021-12-14
1062
怎样去使用
STM32
的
内部
定时器
呢
2022-01-25
697
STM32
CubeIDE整体开发的
流程
是怎样的
2021-11-25
959
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分