HAL_Delay依赖SysTick中断递增的uwTick,并在while中等待uwTick变化。若在中断上下文(优先级不低于SysTick)调用,SysTick中断无法抢占,uwTick永不更新,形成死锁;此外HAL_Delay本身不可重入。无阻塞微秒延时可用DWT->CYCCNT:先使能DWT(CoreDebug->DEMCR|=CoreDebug_DEMCR_TRCENA_Msk; DWT->CYCCNT=0; DWT->CTRL|=DWT_CTRL_CYCCNTENA_Msk),延时函数记录start=DWT->CYCCNT,按SystemCoreClock/1000000换算目标周期数,while((DWT->CYCCNT-start)<ticks)空转。注意CYCCNT为32位,在168MHz下约25.5s回绕,需用无符号差值比较;该方式仍是忙等,只适合短延时,且需保证DWT时钟已使能。