diff --git a/radio/src/targets/common/arm/stm32/module_timer_driver.cpp b/radio/src/targets/common/arm/stm32/module_timer_driver.cpp index 0a5bf1097..e93570461 100644 --- a/radio/src/targets/common/arm/stm32/module_timer_driver.cpp +++ b/radio/src/targets/common/arm/stm32/module_timer_driver.cpp @@ -46,7 +46,10 @@ static void module_timer_send(void* ctx, const etx_timer_config_t* cfg, const void* pulses, uint16_t length) { auto timer = (const stm32_pulse_timer_t*)ctx; - if (!stm32_pulse_if_not_running_disable(timer)) return; + if (!stm32_pulse_if_not_running_disable(timer)) { + LL_DMA_DeInit(timer->DMAx, timer->DMA_Stream); + return; + } // Set polarity stm32_pulse_set_polarity(timer, cfg->polarity); diff --git a/radio/src/targets/common/arm/stm32/stm32_pulse_driver.cpp b/radio/src/targets/common/arm/stm32/stm32_pulse_driver.cpp index 857e4aa7f..101eebbff 100644 --- a/radio/src/targets/common/arm/stm32/stm32_pulse_driver.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_pulse_driver.cpp @@ -298,12 +298,12 @@ void stm32_pulse_start_dma_req(const stm32_pulse_timer_t* tim, // Enable TC IRQ LL_DMA_EnableIT_TC(tim->DMAx, tim->DMA_Stream); - // Reset counter close to overflow - if (IS_TIM_32B_COUNTER_INSTANCE(tim->TIMx)) { - LL_TIM_SetCounter(tim->TIMx, 0xFFFFFFFF); - } else { - LL_TIM_SetCounter(tim->TIMx, 0xFFFF); - } + // Reset counter + LL_TIM_SetCounter(tim->TIMx, 0x00); + + // only on PWM (preloads the first period) + if (ocmode == LL_TIM_OCMODE_PWM1) + LL_TIM_GenerateEvent_UPDATE(tim->TIMx); LL_TIM_EnableDMAReq_UPDATE(tim->TIMx); LL_DMA_EnableStream(tim->DMAx, tim->DMA_Stream);