首先,参考该博主的文章(感谢博主的刨根问底),了解卡死的原理:https://blog.csdn.net/qq153471503/article/details/114700884
在了解原理后,发现在IAP跳转后,APP卡死是因为不能再次对PLL进行初始化操作,所以导致了卡死现象。
经过思考,HAL库所有模块的Init,都会有对应的DeInit,所以在IAP跳转之前,对RCC进行DeInit操作,该问题解决,欢迎批评指正!文章来源:https://www.toymoban.com/news/detail-696617.html
代码如下:文章来源地址https://www.toymoban.com/news/detail-696617.html
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();
}
}
到了这里,关于STM32:HAL_RCC_OscConfig中程序卡死问题解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!