現象:
日前,在使用STM32F103C8時,分boot區和application區,以便進行升級,boot配置為48M,application配置為66M,發現在環境溫度上升到60多度后,產生了Hardfault錯誤。
分析:懷疑是取指問題。
定位:1、將application配置為48M后,問題消失。
2、配置boot、application均為66M,問題重現。
3、再重新配置為24M,問題消失。
4、去掉boot,僅留application,一直配置為24M\48M\66M,發現在66M時問題重現。
5、懷疑為系統頻率PLL配置為題。
6、對源代碼的系統時鐘配置函數進行檢查。AHB,APH1,APH2對照手冊,為發現問題,查詢到
FLASH->ACR ,發現手冊里要求0~24M為0等待;24~48M為1個等待狀態;48M為兩個等待狀態。
發現代碼的等待狀態為1個等待狀態,重新配置:
if (HSE_VALUE <= 24000000)
{
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;
}
else
{
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;
}
7、驗證,發現問題解決。
另外一個問題,從application跳轉到boot后,進行application升級后,發現ADC等外設訪問出錯:
問題所在:在進行軟件跳轉前需要把ADC\SPI等外設disable掉。
|