GD32 mcu sram启动配置方法

1.1 sram启动介绍
sram启动多用于程序调试阶段,将MCU内部自带的sram划分为两个范围,一个作为code区,一个作为数据堆栈区 ,code区和堆栈区大小的划分要结合mcu内部sram大小、code及数据堆栈区的大小划分。本文介绍基于GD32F350芯片在keil工程中的sram配置方法。
1.2 keil工程中sram启动配置
通过查看GD32F350芯片用户手册可知内部sram大小为20k,在keil工程中将code区划分为12k,堆栈区为8k,如下图所示。
code区和堆栈区大小划分
在debug->setting->flash download界面中将flash烧写算法移除,注意选择Do not Erase,否则会一直出现flash擦除错误,具体如下图所示:
flash烧写算法移除
编译整个工程,点击查看.map文件信息可以看到code的加载地址和运行地址都在sram地址范围区间,如下图所示。
编译.map文件
由启动文件可知,程序启动首先执行Reset_Handler函数,GDmcu sram启动硬件强制将PC指针赋值为0x200001e0,PC指针加1开始执行启动文件,故Reset_Handler函数的运行地址需为0x200001e1才行,否则程序就会跑飞。由上图.map文件可知Reset_Handler函数的运行地址为0x20000165,并非0x200001e1,那我们需修改启动文件,使Reset_Handler函数的运行地址为0x200001e1。具体修改如下图所示。
启动文件修改
通过在中断向量表的末尾添加SPACE 0x7C(开辟一段连续空间)使Reset_Handler函数的运行地址为0x200001e1,同时在Reset_Handler函数中,调用系统时钟配置前,添加LDR SP,=_initial_sp,将实际的栈顶指针地址赋值给SP,而不是默认的,这样做的目的是避免默认的栈顶指针指向code区,可能会造成程序跑飞。配置完成后,我们再编译工程,可以看到Reset_Handler函数的地址为0x200001e1。如下图所示。
修改后编译.map文件
至此sram启动的所有配置都已完成(还需将boot0、boot1引脚接高),我们点击keil工程中的debug按钮就可以愉快的调试工程了哈。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值