现象: 日前,在使用STM32F103C8时,分boot区和application区,以便进行升级,boot配置为48M,application配置为66M,发现在环境温度上升到60多度后,产生了Hardfault错误。 分析:怀疑是取指问题。 定位:1、将application配置为48M后,问题消失。 2、配置boot、application均为66M,问题重现。 3、再重新配置为24M,问题消失。 4、去掉boot,仅留application,一直配置为24M48M66M,发现在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等外设访问出错: 问题所在:在进行软件跳转前需要把ADCSPI等外设disable掉。 |
更多回帖