HAL_Delay依赖SysTick中断递增uwTick,并在循环中比较uwTick差值。若在中断上下文中调用,且该中断优先级不低于SysTick(或SysTick被屏蔽),SysTick中断无法抢占,uwTick不再更新,循环条件永远不满足,形成死等。即使优先级允许抢占,在中断里长时间忙等也会破坏实时性。无阻塞微秒延时可用DWT周期计数器:先使能DWT(CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;DWT->CYCCNT=0;DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk),读取起始CYCCNT,计算目标周期数=us*(SystemCoreClock/1000000),循环等待(CYCCNT-start)<目标值。注意CYCCNT为32位,需处理回绕(用无符号差值即可);DWT需调试组件时钟开启,部分低功耗模式会停计数;中断中短延时可用此方式,但长延时仍应改用状态机或定时器回调。