首页 > 解决方案 > STM32F7 系统复位后挂起

问题描述

我有以下问题:

STM32F7 Flash 从 0x0800 0000 开始。我的程序运行良好。然后我将 FLASH 中的代码移到 0x0802 0000 处,为将来的引导加载程序留出空间。我更改了 MemoryMap.xml 文件:

<MemorySegment start="0x08020000" name="FLASH" size="0x80000" access="ReadOnly"/>

和相应的 flashplacement.xml 文件:

<ProgramSection alignment="0x100" load="Yes" name=".vectors" start=" 0x8020000"/>

并开始调试......程序工作正常,直到发生链接错误,通过调用 HAL_NVIC_SystemReset 触发系统重新启动。结果是一个挂起的应用程序,当我的代码驻留在 FLASH (0x0800 0000) 的开头时,情况并非如此。有人知道为什么会发生这种情况吗?

问候

/科斯塔斯

标签: vectorstm32resetflash-memory

解决方案


答案相当简单。你不能只移动内存起始地址。您的 micro 将像往常一样从同一地址获取堆栈指针值和重置处理程序例程地址。你需要让这个引导加载程序已经闪烁(至少向量表和重置处理程序将设置新的向量表,设置应用程序堆栈指针并将控制权传递给你的应用程序重置句柄


推荐阅读