我正在研发带有自定义引导加载程序和应用程序的STM32F401 MCU。编译器是GCC 5.2.1,没有优化正在运行。
在以下跳转序列之后的第一个中断之后,我得到了一个硬错误:bootloader - >申请 - > bootloader - >应用。 从引导加载程序第一次跳转到应用程序后,系统正常运行。然而,在跳回到引导程序之后跳转到应用程序(我没有故意重置板),硬故障发生在第一个中断之后,可能是从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();