From f1773da256b88d9e1a8de07069219055f8370ab3 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 27 May 2023 06:42:40 +0200 Subject: [PATCH] fix: Missing first channel in PPM stream (#3598) --- .../targets/common/arm/stm32/module_timer_driver.cpp | 5 ++++- .../targets/common/arm/stm32/stm32_pulse_driver.cpp | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) 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);