From ec92be725bb33f987d5b5d2684644a1de755dcc9 Mon Sep 17 00:00:00 2001 From: blckmn Date: Wed, 9 Nov 2016 20:29:32 +1100 Subject: [PATCH 1/2] Disable output of DSHOT when motors disabled --- src/main/drivers/pwm_output.c | 2 +- src/main/drivers/pwm_output.h | 2 ++ src/main/drivers/pwm_output_stm32f3xx.c | 9 +++++++++ src/main/drivers/pwm_output_stm32f4xx.c | 8 ++++++++ src/main/drivers/pwm_output_stm32f7xx.c | 9 +++++++++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/drivers/pwm_output.c b/src/main/drivers/pwm_output.c index e4e04cbaa8..736b36d4cf 100644 --- a/src/main/drivers/pwm_output.c +++ b/src/main/drivers/pwm_output.c @@ -35,7 +35,7 @@ static pwmCompleteWriteFuncPtr pwmCompleteWritePtr = NULL; static pwmOutputPort_t servos[MAX_SUPPORTED_SERVOS]; #endif -static bool pwmMotorsEnabled = true; +bool pwmMotorsEnabled = true; static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value, uint8_t output) { diff --git a/src/main/drivers/pwm_output.h b/src/main/drivers/pwm_output.h index 4aa48905ae..02187844be 100644 --- a/src/main/drivers/pwm_output.h +++ b/src/main/drivers/pwm_output.h @@ -75,6 +75,8 @@ typedef struct { #endif } motorDmaOutput_t; +extern bool pwmMotorsEnabled; + struct timerHardware_s; typedef void(*pwmWriteFuncPtr)(uint8_t index, uint16_t value); // function pointer used to write motors typedef void(*pwmCompleteWriteFuncPtr)(uint8_t motorCount); // function pointer used after motors are written diff --git a/src/main/drivers/pwm_output_stm32f3xx.c b/src/main/drivers/pwm_output_stm32f3xx.c index d6e980b73e..896e551729 100644 --- a/src/main/drivers/pwm_output_stm32f3xx.c +++ b/src/main/drivers/pwm_output_stm32f3xx.c @@ -57,6 +57,11 @@ uint8_t getTimerIndex(TIM_TypeDef *timer) void pwmWriteDigital(uint8_t index, uint16_t value) { + + if (!pwmMotorsEnabled) { + return; + } + motorDmaOutput_t * const motor = &dmaMotors[index]; uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now) @@ -83,6 +88,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value) void pwmCompleteDigitalMotorUpdate(uint8_t motorCount) { UNUSED(motorCount); + + if (!pwmMotorsEnabled) { + return; + } for (int i = 0; i < dmaMotorTimerCount; i++) { TIM_SetCounter(dmaMotorTimers[i].timer, 0); diff --git a/src/main/drivers/pwm_output_stm32f4xx.c b/src/main/drivers/pwm_output_stm32f4xx.c index 9f732a4907..2a0f620004 100644 --- a/src/main/drivers/pwm_output_stm32f4xx.c +++ b/src/main/drivers/pwm_output_stm32f4xx.c @@ -58,6 +58,10 @@ uint8_t getTimerIndex(TIM_TypeDef *timer) void pwmWriteDigital(uint8_t index, uint16_t value) { + if (!pwmMotorsEnabled) { + return; + } + motorDmaOutput_t * const motor = &dmaMotors[index]; uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now) @@ -84,6 +88,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value) void pwmCompleteDigitalMotorUpdate(uint8_t motorCount) { UNUSED(motorCount); + + if (!pwmMotorsEnabled) { + return; + } for (int i = 0; i < dmaMotorTimerCount; i++) { TIM_SetCounter(dmaMotorTimers[i].timer, 0); diff --git a/src/main/drivers/pwm_output_stm32f7xx.c b/src/main/drivers/pwm_output_stm32f7xx.c index e192557c01..74c00d2df6 100644 --- a/src/main/drivers/pwm_output_stm32f7xx.c +++ b/src/main/drivers/pwm_output_stm32f7xx.c @@ -57,6 +57,11 @@ uint8_t getTimerIndex(TIM_TypeDef *timer) void pwmWriteDigital(uint8_t index, uint16_t value) { + + if (!pwmMotorsEnabled) { + return; + } + motorDmaOutput_t * const motor = &dmaMotors[index]; uint16_t packet = (value << 1) | 0; // Here goes telemetry bit (false for now) @@ -87,6 +92,10 @@ void pwmCompleteDigitalMotorUpdate(uint8_t motorCount) { UNUSED(motorCount); + if (!pwmMotorsEnabled) { + return; + } + for (uint8_t i = 0; i < dmaMotorTimerCount; i++) { //TIM_SetCounter(dmaMotorTimers[i].timer, 0); //TIM_DMACmd(dmaMotorTimers[i].timer, dmaMotorTimers[i].timerDmaSources, ENABLE); From 3b2aec6470d9041910049046df5414257eb1f1b8 Mon Sep 17 00:00:00 2001 From: blckmn Date: Thu, 10 Nov 2016 07:16:19 +1100 Subject: [PATCH 2/2] Fixed ANYFCF7 build --- src/main/drivers/pwm_output_hal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/drivers/pwm_output_hal.c b/src/main/drivers/pwm_output_hal.c index 5e3dd4a05c..d81d027422 100644 --- a/src/main/drivers/pwm_output_hal.c +++ b/src/main/drivers/pwm_output_hal.c @@ -35,7 +35,7 @@ static pwmCompleteWriteFuncPtr pwmCompleteWritePtr = NULL; static pwmOutputPort_t servos[MAX_SUPPORTED_SERVOS]; #endif -static bool pwmMotorsEnabled = true; +bool pwmMotorsEnabled = true; static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value, uint8_t output) {