APM32E103(类似STM32F103)程序运行一段时间总是会进入HardFault_Handler()的问题解决

在调试APM32E103微控制器时遇到程序频繁触发HardFault_Handler。经过分析,问题源于定时器中断中的空指针调用以及SystemInit()中的时钟配置错误。修复了初始化顺序并调整时钟配置以匹配实际的16MHzHSE值后,解决了因超频导致的程序不稳定问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题描述

调试APM32E103(类似STM32F103的一款芯片)板子时,程序运行一段时间后总是会发生HardFault_Handler()。

2. 解决过程

  1. 网上查各种资料,总结可能的原因如下

现象:跑着跑着进入了 HardFault_Handler() 死循环。
原因:
1、内存溢出或者访问越界。
2、堆栈溢出,程序指针指飞。
3、空指针的调用。
4、硬件电路错误!

  1. 仔细检查程序后发现在定时器中断里有对函数指针的调用,且定时器配置和使能在函数指针的初始化之前,所以确实导致了中断里对空指针进行了调用,导致HardFault
  2. 步骤2进行完后,程序运行30s左右,还是会进入HardFault_Handler(),且Peripherals->Core Peripherals->Fault Reports里的故障标志不尽相同
  3. 最后发现是SystemInit()中时钟配置的问题,板子上的HSE是16MHz,而用的示例程序中的SystemInit()中时钟配置都是按照外部8MHz的晶振来配置的,所以导致系统时钟是设想的两倍,原本想配置为72MHz,实际变成了144MHz,超频导致程序运行不稳定,所以会发生HardFault!!!
  4. 把apm32e10x.h中HSE_VALUE由8000000改为16000000.

#ifndef HSE_VALUE
#define HSE_VALUE ((uint32_t)16000000)
#endif

在system_apm32e10x.c中SystemClock72M()中把PLL配置在原来按照8MHz的HSE来配置的基础上进行2分频。
问题解决 ^-^

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值