当前位置: 代码迷 >> 单片机 >> stm32f407总是进入HardFault_Handler异常中断
  详细解决方案

stm32f407总是进入HardFault_Handler异常中断

热度:478   发布时间:2016-04-28 14:41:19.0
stm32f407总是进入HardFault_Handler错误中断
我的问题大概是这样的,使用三个定时器,TIM2用来定时,TIM3用来产生PWM波,TIM4用来编码器捕获脉冲,在定时和捕获中断函数里面什么都不加,程序可以正常运行,但是一旦加入一个全局变量并且,并且在主函数中调用这个变量,程序就会进入
hardfault_handler()  ,这个问题搞了好几天了,头疼死了,希望大神求解
下面代码
------解决思路----------------------
查查是不是中断优先级配置有问题。进硬件错误中断一般是外设配置有问题,况且你是三个定时器一起用,中断优先级没配好很容易出问题
------解决思路----------------------
有JTAG仿真的话,比较方便,可以在HardFault里面打断点,查看寄存器的值,尤其PC指针和SP堆栈指针,查找问题。如果没找到,根据PC和SP指针位置,在汇编中找到相应的C语言代码,继续打断点,循环追踪,直到找到真正引起HardFault的代码,然后对症下药
------解决思路----------------------
没看明白你的控制原理是啥,TIM4捕获的脉冲频率是多少,有没有可能频率太高,造成TIM4中断过载。
一般的控制原理,及资源分配如下:
1.TIM4初始化为捕获功能,中断禁能,将采集的脉冲数存储在相应寄存器中。
2.TIM2为定时器功能,中断使能,周期从TIM4中读脉冲数来计算速度等,比如,TIM2定是周期1S,该周期内读到1000个脉冲,就能根据实际的脉冲与角速度或线速度对应关系算出当前速度。控制方法也在该中断中处理,模糊控制或PID,并将最终参数更新到TIM3。
3.TIM3为PWM功能,中断禁能,根据参数产生一路或多路PWM。