文章轉載自:https://blog.csdn.net/u014470361/article/details/78780444
背景:
程序運行時,發現程序卡死在B.處。
解決方法:
程序卡死在B.處說明有中斷沒有處理,導致程序進入中斷后無法跳出。
之后查看程序發現,程序中定義了一個中斷,但是之前一次偶然把中斷處理程序屏蔽了,導致沒有中斷處理函數。
程序如下:
//開啟了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);//}
把程序取消屏蔽后,程序正常運行了。
總結:程序卡死在B.處,一般都是有中斷沒有處理,仔細檢查下相關中斷的配置和處理函數,找出錯誤即可。