HAL_Delay依赖SysTick中断递增uwTick,并在while循环中等待uwTick变化。若在中断上下文中调用,且该中断优先级高于或等于SysTick中断(默认最低优先级),SysTick中断无法抢占,uwTick永不更新,导致死锁。即使优先级较低,若在SysTick中断服务函数内调用也会死锁。正确做法:使用DWT周期计数器实现非阻塞微秒延时。初始化:使能DWT(CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CYCCNT=0; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;)。延时函数:记录起始周期DWT->CYCCNT,计算目标周期数=us*(SystemCoreClock/1000000),循环等待直到(DWT->CYCCNT - start) >= ticks。注意处理计数器溢出(无符号减法自动回绕)。此方法不依赖中断,可在任意上下文使用,但需确保DWT已使能且系统时钟稳定。