STM32:从自定义引导加载程序跳转到应用程序时出现硬错误

时间:2016-07-19 08:44:27

标签: c gcc stm32f4

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

0 个答案:

没有答案