项目执行boot跳转后,遇到RCC配置直接进入硬件异常中断,遇到过多种情况,这边做个记录。
跳转前后关中断开中断不过多介绍,主要介绍下花费时间较长的问题排查
1、PLL锁相环问题
在boot中启用了PLL锁相环,需要在APP中切换时钟源,再重新配置PLL。
/**
* 因为在BootLoader中已经初始化过锁相环PLL,
* 所以需先切换下时钟再进行配置锁相环,之后切换回时钟源,
* 否则会在配置锁相环时异常 HAL_RCC_OscConfig 执行失败
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
2、SysTick时钟问题
使用freeRTOS时,SysTick做为操作系统时钟源,在boot跳转前需要先禁用SysTick;
SysTick->CTRL = 0x00; //禁止SysTick
也曾遇到APP串口初始化不正确的问题,原因是在boot中已经初始启动了串口,在重新配置时不起作用,需要先关闭串口,再重新配置即可。LL_USART_Disable(USART1);