stm32hal庫之外部中斷巨坑導致程序卡死在中斷函數

stm32hal庫之外部中斷巨坑,如果使用按鍵外部中斷會導致頻繁觸發中斷,從而不能退出中斷,導致卡死

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
   __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
	
  }
}

把上面的改爲

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
   // __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
		__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
  }
}

原因是在回調函數沒有執行完畢就去執行清除外部中斷標誌位對的話,如果按鍵還在按下,有可能導致不停觸發中斷,也就是不斷嵌套中斷,導致不能退出,卡死在中斷裏面,因爲按鍵觸發外部中斷起碼有幾百ms,這期間大家想想可以觸發多少次中斷了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章