407的引导,升级两个工程生成的hex文件,一个A工程可以从引导正常跳转到应用层一个B工程不行,起初怀疑是B工程用了最新固件引起哪里问题,查启动查配置文件,一番测试下来无果。奇怪是直接工程下载可以正常从引导跳转,但是通过自己写的引导就是不行,又怀疑是引导的擦除没擦好,换jflash下载也不行,一番折腾后,无意间发现工程设置的ic型号的尾缀没跟板子的实际焊接一致。
离线
`几个注意点:
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个就是栈首地址。
离线
支持楼主
离线
膜拜楼主,请问缺大腿挂件不?
在线
支持楼主转战阵地,多发点干货。
离线
帮顶,有资料说标准库和HAL库混用时,需要更加注意是否环境干净,不干净就不能正常运行
离线