MDK 仿真环境下 STM32 RAM 调试方法
本文主要记录 STM32F103C8T6 芯片在 MDK 仿真环境下采用内部 SRAM 启动程序并调试的方法。
SRAM 调试的特点
- 速度块,将代码下载到 SRAM 的速度远超 FLASH;
- 理论无限次读写,增加芯片的使用寿命,在大量小批量修改代码并调试的场景,SRAM 调试方式可以显著增加调试效率,避免频繁擦写 FLASH;
- 掉电会丢失数据;
- 空间较小。
配置 STM32 SRAM 调试的步骤
BOOT 管脚的配置
STM32 CPU 从地址 0x00000000 获取堆栈顶的地址,并从启动存储器的 0x00000004 指示的地址开始执行代码。当 BOOT 模式配置为从 FLASH 存储器启动时,这两个地址分别被映射到 0x08000000 和 0x08000004。当 BOOT 模式配置为从内置 SRAM 启动时,这两个地址分别被映射到 0x20000000 和 0x20000004。BOOT 模式的配置如下:
BOOT1引脚 | BOOT0引脚 | 启动模式 | 映射地址 |
---|---|---|---|
任意值 | 0 | 主闪存存储器 | 0x08000000 |
0 | 1 | 系统存储器 | 0x1FFFB000(互联型产品),0x1FFFF000(其他产品) |
1 | 1 | 内置SRAM | 0x20000000 |
基于以上信息,若要使程序从 SRAM 启动,则需将芯片的 BOOT0 管脚和 BOOT1 管脚均接高电平。
在原有工程的基础上增加一个 DEBUG 配置版本
这样修改配置后不会影响原有项目的配置。
配置中断向量表
打开工程配置窗口,在C/C++一栏指定默认的宏 VECT_TAB_SRAM 即可。
配置分散加载文件
这步无需手动配置,打开工程配置界面在 Target 一栏中即可配置,同时还需要在 Linker 一栏中勾选 Use Memory Layout from Target Dialog 项目,用于分配只读存储区域和可读写数据区域。
配置调试下载初始化文件
打开工程配置窗口,切换到 Debug 一栏,取消勾选 Load Application at Startup 选项同时选择初始化文件。
初始化文件 stm32sram.ini 需要手动创建,该配置文件的内容为:
1 |
|
程序调试下载配置
打开工程配置窗口,切换到 Debug 一栏,选择对应的调试器,然后点击 Setting 按钮,在打开的设置界面勾选 Verify Code DownLoad 和 DownLoad to Flash 两项。
在上一步打开的工程配置窗口 Debug-Setting 选择 Flash Download 一栏,在左上方选择 Do not Erase 选项,同时在右侧配置写入 SRAM 的地址信息,这里的信息必须和 Target 中配置的信息一致;
配置结束后,直接进行编译、调试程序即可。