在调试can通信过程产生的问题,我是用定时器中断每隔一定时间,就让单片机(一个节点)发送一帧数据给另一个节点。这些都不是关键。关键是在我没有使用定时器TIM4的时候(此时,已经打开了串口,can接收中断),一切都ok。在初始化TIM4后,打开了TIM4_IRQHandler定时器中断,问题出现了在进入定时器中断 1 到 2次后,pc跳入了STM32的启动文件里,下面这个地方:(且R14(LR)寄存器的值为一个莫名的地址0xfffffff1)
HardFault_Handler\
PROC
EXPORT HardFault_Handler [WEAK]
B .
ENDP
这里先排除掉几个方面,TIM4_IRQHandler是定义里的有入口地址,STM32F103RET6启动文件配置正确。
这两天简单研究了一下M3核的汇编指令,试着解决问题。对于跳入HardFault_Handler的问题,网上的答案,只隔靴挠痒,没有解决实质问题,说是什么,指针指向系统不允许的地方、数据数组溢出了,硬件错误,等等。且不说是不是这些原因。我也单步调试了,关键是怎么知道数组是否越界?怎么找硬件出错的地方。或者写个汇编代码,把问题出错的地方打印出来。捣腾3天了……只好求助于各位大侠了!先谢谢 |