写按键驱动的时候封装了一层函数,接收按键枚举和监听事件函数指针,传递给外部中断回调统一处理,习惯性地在监听函数写了HAL_Delay(200),然后就坏菜了
编译下载,按下Confirm,程序卡死
重新回顾了一下NVIC与HAL_Delay的机制,才注意到
HAL_Delay依赖HAL_GetTick获取SysTick计数值来实现延时的时间判断,而HAL_GetTick的值又需要SysTick中断来更新。在优先级更高的中断的回调中调用HAL_Delay时,优先级相对较低的SysTick中断无法触发,uwTick的值得不到更新,HAL_Delay所比较的时间一直不动,便一直执行阻塞,造成cpu卡死。
删除中断中出现的HAL_Delay(),编译下载,正常运行。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 无愚的日记!
评论



