我正在开发带有自定义引导加载程序和应用程序的 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(使用前将#替换为@)