1 背景:
程序运行时,发现程序卡死在B.处。
2 分析(可忽略,只是想学习一下调试方法)
B是跳转指令,.据说是当前地址。所以结合起来就是跳转到当前地址,也就是在当前位置无限循环,进入死循环。
第一步:
右击Default_Handler,出现Show Caller Code,跳转到出现错误的代码处。
然后
第二步
查找出现Fault的类型和代号。单击Peripherials->core Peripherials->Fault Reports。可以借助“Using Cortex M3 M4 M7 Fault Exceptions”这个文档去查找。虽然文档中没有找到Halted是什么错误,但是Halted是英文停止的意思。
出现
3 解决方法
程序卡死在B.处说明有中断没有处理,导致程序进入中断后无法跳出。
4 说明
查看程序发现,程序中定义了一个中断,但是之前一次偶然把中断处理程序屏蔽了,导致没有中断处理函数。
程序如下:
//开启了EXTI15_10_IRQn中断
void nirq_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin =GPIO_PIN_13;
GPIO_InitStructure.Mode =GPIO_MODE_IT_FALLING ;
GPIO_InitStructure.Pull =GPIO_NOPULL;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
//不小心把中断函数屏蔽了,如下:
//void EXTI15_10_IRQHandler(void)
//{
// HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
//}
把中断函数程序取消屏蔽后,程序正常运行了。