diff --git a/src/main/drivers/dshot_bitbang.c b/src/main/drivers/dshot_bitbang.c index b19f79c127..7c9c195a0f 100644 --- a/src/main/drivers/dshot_bitbang.c +++ b/src/main/drivers/dshot_bitbang.c @@ -622,8 +622,14 @@ static void bbUpdateComplete(void) bbPort->inputActive = false; bbSwitchToOutput(bbPort); } - } + } else #endif + { +#if defined(STM32G4) + // Using circular mode resets the counter one short, so explicitly reload + bbSwitchToOutput(bbPort); +#endif + } bbDMA_Cmd(bbPort, ENABLE); } diff --git a/src/main/drivers/dshot_bitbang_ll.c b/src/main/drivers/dshot_bitbang_ll.c index 81bddb5c67..b239100ac3 100644 --- a/src/main/drivers/dshot_bitbang_ll.c +++ b/src/main/drivers/dshot_bitbang_ll.c @@ -156,10 +156,10 @@ static void bbSaveDMARegs(dmaResource_t *dmaResource, dmaRegCache_t *dmaRegCache dmaRegCache->PAR = ((DMA_ARCH_TYPE *)dmaResource)->PAR; dmaRegCache->M0AR = ((DMA_ARCH_TYPE *)dmaResource)->M0AR; #elif defined(STM32G4) - ((DMA_ARCH_TYPE *)dmaResource)->CCR = dmaRegCache->CCR; - ((DMA_ARCH_TYPE *)dmaResource)->CNDTR = dmaRegCache->CNDTR; - ((DMA_ARCH_TYPE *)dmaResource)->CPAR = dmaRegCache->CPAR; - ((DMA_ARCH_TYPE *)dmaResource)->CMAR = dmaRegCache->CMAR; + dmaRegCache->CCR = ((DMA_ARCH_TYPE *)dmaResource)->CCR; + dmaRegCache->CNDTR = ((DMA_ARCH_TYPE *)dmaResource)->CNDTR; + dmaRegCache->CPAR = ((DMA_ARCH_TYPE *)dmaResource)->CPAR; + dmaRegCache->CMAR = ((DMA_ARCH_TYPE *)dmaResource)->CMAR; #else #error MCU dependent code required #endif