ST社区您好!
我正在使用
STM32F417VGT6 在 Keil IDE 中执行 IAP。
在引导加载程序中,使用 SD 卡上的二进制文件,我读取执行的二进制程序并将其写入闪存。然后我使用 Jump_To_Applica
tion() 启动新应用程序。一切正常,我们没有遇到任何问题。
这个过程对于 4KB 和 25KB 的二进制文件都没有问题。但是当我尝试加载更重的二进制文件(如 112KB 或 500KB)时,MCU 会重置并且不会发生跳转。重置后,我们从引导加载程序开始。
我用 ST-LINK Utility 仔细检查了 MCU 闪存,我的二进制文件已正确写入正确的地址。
遗憾的是,无法调试,因为 MCU 不再位于引导加载程序代码中。
您可能已经注意到,这是可疑的。据我所知,跳转到一个新程序与该程序的大小无关。
这是我用来执行跳跃的一组代码:
JumpAddress = *(uint32_t*) (FLASH_USER_START_ADDR + 4);
Jump_To_Application = (pFunction) JumpAddress;
跳转到应用程序();
当然,我确实禁用了我在引导加载程序中启用的几乎所有外围设备和中断。
如果您分享您的解决方案,我将不胜感激。