From e1b16311d08288e4d1db28ff38f37419dbed436a Mon Sep 17 00:00:00 2001 From: 3djc <5167938+3djc@users.noreply.github.com> Date: Thu, 8 Jan 2026 03:50:23 +0100 Subject: [PATCH] fix: ensure ws2812 DMA transfer is completed before disabling channel (#6961) --- radio/src/targets/common/arm/stm32/stm32_ws2812.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/radio/src/targets/common/arm/stm32/stm32_ws2812.cpp b/radio/src/targets/common/arm/stm32/stm32_ws2812.cpp index 0ad3c21ba..647a2fe07 100644 --- a/radio/src/targets/common/arm/stm32/stm32_ws2812.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_ws2812.cpp @@ -139,6 +139,12 @@ static void _update_dma_buffer(const stm32_pulse_timer_t* tim, uint8_t tc) LL_DMA_DisableIT_TC(tim->DMAx, tim->DMA_Stream); LL_DMA_DisableIT_HT(tim->DMAx, tim->DMA_Stream); LL_DMA_DisableStream(tim->DMAx, tim->DMA_Stream); + + uint32_t timeout = 1000; + while (LL_DMA_IsEnabledStream(tim->DMAx, tim->DMA_Stream) && timeout--) { + __NOP(); // Wait + } + LL_TIM_CC_DisableChannel(tim->TIMx, tim->TIM_Channel); } WS2812_DBG_LOW;