解决STM32中HAL_RCC_OscConfig导致程序卡死的问题

首先,参考该博主的文章(感谢博主的刨根问底),了解卡死的原理:https://blog.csdn.net/qq153471503/article/details/114700884

在了解原理后,发现在IAP跳转后,APP卡死是因为不能再次对PLL进行初始化操作,所以导致了卡死现象。

经过思考,HAL库所有模块的Init,都会有对应的DeInit,所以在IAP跳转之前,对RCC进行DeInit操作,该问题解决,欢迎批评指正!

代码如下:

void JumpToApplication(void)
{
	/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
	if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
	{ 
		/* Jump to user application */
		JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
		Jump_To_Application = (pFunction) JumpAddress;

		HAL_RCC_DeInit();    //对RCC进行DeInit操作,防止APP卡死
		
		/* Initialize user application's Stack Pointer */
		__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
		/* Jump to application */
		Jump_To_Application();
	}
}

物联沃分享整理
物联沃-IOTWORD物联网 » 解决STM32中HAL_RCC_OscConfig导致程序卡死的问题

发表评论