J斌(´・ω・`)  

关于STM32程序卡在B.即Default_Handler处的解决方法

1.问题现象

TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
                B       .

                ENDP

                ALIGN

编译时没报错,运行时就一直在此循环了。

2.分析原因

B . 的意思相当于51单片机中常用的SJMP$即原地死循环。
发现进程进入了Default_Handler,如果打开了某个中断,而没有给这个中断编写中断服务函数,中断被触发时程序就会进入这个Default_Handler进行死循环。

3.解决方法

查看程序后发现,程序中少定义了一个中断,之前不小心删除了。

/**
  * @brief This function handles TIM7 global interrupt.
  */
void TIM7_IRQHandler(void)
{
  /* USER CODE BEGIN TIM7_IRQn 0 */

  /* USER CODE END TIM7_IRQn 0 */
  HAL_TIM_IRQHandler(&htim7);
  /* USER CODE BEGIN TIM7_IRQn 1 */

  /* USER CODE END TIM7_IRQn 1 */
}

之前打开了TIM7的中断,后续移植把TIM7的中断函数TIM7_IRQHandler不小心删除了,后面加回去就可以了。

4.总结

调试时进入B . 时,仔细检查中断处理函数。

posted on 2020-09-24 14:44  J斌(´・ω・`)  阅读(1141)  评论(0)    收藏  举报