2

我正在开发带有自定义引导加载程序和应用程序的 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();
4

0 回答 0