STM32中断中使用HAL_Delay引起的死机分析及其解决方案
问题
在使用按键配置外部中断时,使用HAL_Delay函数进行延时消抖,当进入中断时程序卡死无反应,去除HAL_Delay后恢复正常
1 | void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) |
原因
查看HAL_Delay相关程序发现,HAL_Delay是通过滴答定时器的中断进行延迟。
1 | /** |
进而查找滴答定时器相关初始化发现,在程序初始化时默认把滴答定时器的中断优先级设为最低。
解决方法
我们可以在main的初始化后里加上如下指令把滴答定时器优先级调为最高,问题解决。
1 | HAL_NVIC_SetPriority(SysTick_IRQn,0,0U); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Galaseal!