单片机学习小组
直播中

李璐

7年用户 171经验值
私信 关注

使用STM32F103C8时出现Hardfault错误,请问是为什么?如何解决?

现象:

      日前,在使用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掉。

更多回帖

发帖
×
20
完善资料,
赚取积分