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,這期間大家想想可以觸發多少次中斷了