STM32:从自定义引导加载程序跳转到应用程序时发生硬故障

2024-04-28

我正在开发带有自定义引导加载程序和应用程序的 STM32F401 MCU。编译器是GCC 5.2.1,没有运行优化。

在以下跳转序列后的第一次中断后,我遇到了硬故障:引导加载程序 -> 应用程序 -> 引导加载程序 -> 应用程序。 从引导加载程序第一次跳转到应用程序后,系统工作正常。然而,在跳回引导加载程序后跳转到应用程序(我不是故意重置板)后,硬故障发生在第一个中断之后,可能是从 SysTick 到 EXTI 的任何中断。

这可能是什么原因?有什么我不更新的吗? 谢谢。

代码存根:

跳转过程(对于两个程序;应用程序位于 0x08008000,引导加载程序位于 0x08000000):

typedef  void (*pFunction)(void);
uint32_t appStack;
pFunction appEntry;

//Jump to address
/* Get the application stack pointer */
appStack = (uint32_t) * ((__IO uint32_t*)address);
/* Get the application entry point */
appEntry = (pFunction) * (__IO uint32_t*) (address + 4);

/* Reconfigure vector table offset */
SCB->VTOR = address;

__set_MSP(appStack);

appEntry();

跳转前应用程序清理:

osThreadSuspendAll();
__disable_irq();
SysTick->CTRL =0;
SysTick->LOAD=0;
SysTick->VAL=0;

__set_PRIMASK(1);

HAL_UART_DeInit(&huart2);
HAL_I2C_DeInit(&hi2c1);
HAL_RCC_DeInit();
HAL_DeInit();

禁用引导加载程序中使用的所有外设,然后跳转到应用程序解决了该问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32:从自定义引导加载程序跳转到应用程序时发生硬故障 的相关文章

随机推荐