STM32F407 定时器TIM3 出现 HardFault_Handler

今天准备用STM32F407定时器做个 定时周期扫描,想偷个懒,于是乎在在战舰的开发历程中复制出来一段,结果无尽的折磨人来了。首先看我复制的代码。

STM32F407 定时器TIM3 出现 HardFault_Handler_第1张图片

STM32F407 定时器TIM3 出现 HardFault_Handler_第2张图片

 

根据实际需要 我把代码改成这样了

STM32F407 定时器TIM3 出现 HardFault_Handler_第3张图片

 

几乎就是没动了。然而就是这么简单的 事出现问题了。

STM32F407 定时器TIM3 出现 HardFault_Handler_第4张图片

点击运行 本想看着小灯狂闪,结果坑爹了

STM32F407 定时器TIM3 出现 HardFault_Handler_第5张图片

进这个异常中断里了,这是什么鬼?

打开 fault report

STM32F407 定时器TIM3 出现 HardFault_Handler_第6张图片

并没有啥有用信息

STM32F407 定时器TIM3 出现 HardFault_Handler_第7张图片

右键 hardFault_Hander 并没有定位到问题。

在群里问来问去 ,都是一副高高在上的样子,认为问题很简单,程序问题(这不是废话吗,我也知道是程序问题,不知道是哪的问题)。折磨一下午。各种删 各种尝试 。无果。

无意间 中断里的屏蔽掉了 。

居然 没有 fault 了。

莫非问题 在这?

果断 换位置 组合尝试

STM32F407 定时器TIM3 出现 HardFault_Handler_第8张图片

这么写 没有问题 fault 问题就这么解决了 ,出乎意料!

 

总结: 后来有刷了一遍官方的历程 发现能正常运行。而我写的程序好使不行 ,差别在IO口程序翻转上,官方历程是通过地址映射 直接读取IO的值。我是通过调用库函数 实现IO翻转。

个人猜测原因(仅供参考,欢迎拍砖):由于我调用库函数的效率要比直接端口内存映射效率低一些,而这时

中断标志位没有清楚。又重新申请中断 导致出现fault错误。

STM32F407 定时器TIM3 出现 HardFault_Handler_第9张图片

进中断就清中断标志位,然后在执行相关操作,就不会出现该问题。

 

你可能感兴趣的:(ARM)