关于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 . 时,仔细检查中断处理函数。

浙公网安备 33010602011771号