HAL_TIM_STATE_BUSY is cleared in the TIM_DMADelayPulseHalfCplt interrupt handler. I don't know what is the point here. You can wait for the half DMA transfer completion to reset timer state, or it may be safe to set htim->State = HAL_TIM_STATE_READY ...