您尚未登录。

楼主 #1 2020-05-11 09:22:09

BugActiveDaughter
会员
注册时间: 2017-10-17
已发帖子: 118
积分: 117.5

stm32f407用引导升级挖坑跳坑

407的引导,升级两个工程生成的hex文件,一个A工程可以从引导正常跳转到应用层一个B工程不行,起初怀疑是B工程用了最新固件引起哪里问题,查启动查配置文件,一番测试下来无果。奇怪是直接工程下载可以正常从引导跳转,但是通过自己写的引导就是不行,又怀疑是引导的擦除没擦好,换jflash下载也不行,一番折腾后,无意间发现工程设置的ic型号的尾缀没跟板子的实际焊接一致。1.png

离线

楼主 #2 2020-05-11 09:24:06

BugActiveDaughter
会员
注册时间: 2017-10-17
已发帖子: 118
积分: 117.5

Re: stm32f407用引导升级挖坑跳坑

`几个注意点:
1:M3,退出BOOT时要禁止全局中断, 如果不修改这BUG, APP里必须先配置中断向量表才能开启中断。
2:退出boot前尾巴打扫干净 ,用了啥就把啥DeInit ,Rcc_DeInit这个也要。
3:擦除编程时关中断。
4:官方一些引导在判断栈地址是通用,需要根据实际范围做修改,比如429,内存0x30000,而引导 if (((*(__IO uint32_t *)UserAddress) & 0x2FFE0000 ) == 0x20000000)这个判断把应用层的地址局限再0x20000,所以需要改为
if (((*(__IO uint32_t *)UserAddress) & 0x2FFc0000 ) == 0x20000000)
,这样应用层内存用掉比较多的时候,引导才能成功跳转。

另外说明:
现在的编译器生成的变量编排是这样的,RAM首地址先是全局变量,然后堆,最后是栈。而栈的首地址就排在最末尾,CM内核的栈都是向下生长的 ,所以我们直接判断栈首地址是否超出即可。程序里面之所以可以直接判断第1个数据,是因为程序最开始是中断向量表,中断向量表的第1个就是栈首地址。

离线

#3 2020-05-11 09:31:04

rongwinzip
会员
注册时间: 2020-03-14
已发帖子: 49
积分: 2.5

Re: stm32f407用引导升级挖坑跳坑

支持楼主

离线

#4 2020-05-11 09:38:01

hzqlz
会员
注册时间: 2018-03-23
已发帖子: 141
积分: 135

Re: stm32f407用引导升级挖坑跳坑

膜拜楼主,请问缺大腿挂件不?

离线

#5 2020-05-11 12:48:35

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

Re: stm32f407用引导升级挖坑跳坑

支持楼主转战阵地,多发点干货。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn