聊天界面发送嵌入式大杂烩获取1TB大杂烩资料包
STM32的FLASH擦写次数有限(大概为1万次),所以为了延长FLASH的使用时间,我们平时调试时可以选择在SRAM中进行硬件调试。除此之外,SRAM 存储器的写入速度比在内部 FLASH 中要快得多,所以下载程序到SRAM中的速度较快。
所以我们很有必要建立两个版本的工程配置,在SRAM中调试程序完毕后,再把代码下载到FLASH中即可。这篇笔记主要分享在keil5中配置FLASH调试与SRAM调试的详细配置方法及如何切换两种配置。
在FLASH中进行硬件仿真调试
1、硬件设置
BOOT0配置为0,BOOT1随意设置。
2、keil设置
本文以keil5为例。步骤如下:
target的名称是可以随意更改的,这里我们改为FLASH。
(3)Debug选项设置:
(4)编译,然后按Ctrl F5进入调试界面:
在SRAM中进行硬件仿真调试
在SRAM的仿真调试配置比FLASH中的配置要麻烦一点~
1、硬件设置
BOOT0配置为1,BOOT1配置为1。
2、keil设置
(1)新建一个target,并修改名称为SRAM:
(2)切换至SRAM Target:
(4)C/C 选项设置:
为什么在RAM中调试要设置这个宏而在FLASH中调试却不需要?这是因为我们的中断向量表默认位于FLASH中,而此时我们要在RAM中进行调试,所以需要把中断向量表拷贝到RAM中,相关代码在system_stm32f10x.c的SystemInit函数中:
其实system_stm32f10x.c文件中也有宏VECT_TAB_SRAM相关的代码:
把这行代码打开即可把中断向量表拷贝到RAM中。但是这里选择在C/C 选项选项里添加宏,因为这样可以保证SRAM版本与FLASH版本代码的一致性。
(5)Debug设置:
与在FLASH中调试不同的是,这里需要加入.ini文件:
这个.ini可以自己创建(也可以在芯片支持包里找到),这里我们建为Dbg_RAM.ini。文件里的内容如下:
其中这里的第11行是需要根据实际进行修改的,需要把工程编译得出的.axf格式文件的路径及其文件名填到这里。这里因为我们这里的的.ini文件在.axf的上一级目录:
所以此处以./Objects来表示。如果觉得麻烦的话,可以把.axf文件与.ini放在同一个目录下。
以上就是在FLASH中调试与在SRAM中调试的设置方法,调试代码时可以选择SRAM版本的配置,调试完成再切换回FLASH版本的配置,把程序下载到FLASH中。切换方法:
在RAM中调试的优缺点
以下来自《【野火】零死角玩转STM32—F429挑战者V2.pdf》。
优点:
1、载程序非常快。RAM 存储器的写入速度比在内部 FLASH 中要快得多,且没有擦除过程,因此在 RAM 上调试程序时程序几乎是秒下的,对于需要频繁改动代码的调试过程,能节约很多时间,省去了烦人的擦除与写入 FLASH 过程。另外,STM32 的内部 FLASH 可擦除次数为 1 万次,虽然一般的调试过程都不会擦除这么多次导致 FLASH 失效,但这确实也是一个考虑使用 RAM 的因素。
2、不改写内部 FLASH 的原有程序。
3、对于内部 FLASH 被锁定的芯片,可以把解锁程序下载到 RAM 上,进行解锁。
缺点:
1、存储在 RAM 上的程序掉电后会丢失,不能像 FLASH 那样保存。
2、SRAM空间较小。
以上就是本次分享的关于RAM调试与FLASH调试的笔记,更多的相关原理、细节可查阅《【野火】零死角玩转STM32—F429挑战者V2.pdf》。
猜你喜欢:
STM32的ISP下载的原理是什么呢?
STM32串口IAP分享
C语言代码优化的一些技巧(四)
【DSP笔记】TI官方例程中切换RAM、FLASH工程版本的方法
我的个人博客:
https://zhengnianli.github.io
等你来撩:
聊天界面发送嵌入式大杂烩获取1T大杂烩资料包
聊天界面发送m获取往期笔记目录