在使用官网IAP例程的时候,发现偶发会出现boot跳转app失败的情况(现象体现在跳转后无任何app打印,app代码未正常运行),多次测试发现可能是因为时钟切换的问题:
boot中使用的是内部HSI 8M作为时钟源经PLL产生96M系统时钟(下方注释掉的代码)。
/**
* SetSysClock
*
* @param[in] none
* [url=home.php?mod=space&uid=266161]@return[/url] none
*
* [url=home.php?mod=space&uid=247401]@brief[/url] Use HSI mode, set the clock
*/
static void SetSysClock(void)
{
//SetHSIClock();
SetHSEClock();
}
而在app中,会再次初始化时钟,且此时使用的是外部HSE 8M晶振作为时钟源产生96M系统时钟。
结合以前在其他芯片上同样遇到过的问题,怀疑是因为在使用PLL电路的情况下切换了PLL的时钟源,会导致时钟初始化有概率性失败。
在把boot中的时钟初始化改为采用外部HSE时钟后,问题不再复现。
同时,也可以在app中,系统时钟初始化之前,先将系统时钟切换为使用内部8M时钟作为系统时钟源,再去初始化PLL,完毕后再切换为PLL输出作为系统时钟,也可以解决该问题。
这样的问题我以前在sta1078的一款芯片上同样遇到过,当时是boot和app中配置的时钟频率不一样,结果同样是时钟初始化失败,不知道各位有没有遇到过。
|