From f15bdcdce926d93ce2c23d62b6ecdc93d4d9cd1c Mon Sep 17 00:00:00 2001 From: blckmn Date: Fri, 25 Nov 2016 22:24:30 +1100 Subject: [PATCH] Perform DMA check before writing to motors. --- src/main/drivers/pwm_output_stm32f3xx.c | 4 ++++ src/main/drivers/pwm_output_stm32f4xx.c | 4 ++++ src/main/drivers/pwm_output_stm32f7xx.c | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/drivers/pwm_output_stm32f3xx.c b/src/main/drivers/pwm_output_stm32f3xx.c index 5adf8f63b..b0db2103e 100644 --- a/src/main/drivers/pwm_output_stm32f3xx.c +++ b/src/main/drivers/pwm_output_stm32f3xx.c @@ -71,6 +71,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value) motorDmaOutput_t * const motor = &dmaMotors[index]; + if (!motor->timerHardware->dmaChannel) { + return; + } + uint16_t packet = (value << 1) | (motor->requestTelemetry ? 1 : 0); motor->requestTelemetry = false; // reset telemetry request to make sure it's triggered only once in a row diff --git a/src/main/drivers/pwm_output_stm32f4xx.c b/src/main/drivers/pwm_output_stm32f4xx.c index 0773efe08..da5eb7544 100644 --- a/src/main/drivers/pwm_output_stm32f4xx.c +++ b/src/main/drivers/pwm_output_stm32f4xx.c @@ -69,6 +69,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value) motorDmaOutput_t * const motor = &dmaMotors[index]; + if (!motor->timerHardware->dmaStream) { + return; + } + uint16_t packet = (value << 1) | (motor->requestTelemetry ? 1 : 0); motor->requestTelemetry = false; // reset telemetry request to make sure it's triggered only once in a row diff --git a/src/main/drivers/pwm_output_stm32f7xx.c b/src/main/drivers/pwm_output_stm32f7xx.c index 32ce62054..2a52652d1 100644 --- a/src/main/drivers/pwm_output_stm32f7xx.c +++ b/src/main/drivers/pwm_output_stm32f7xx.c @@ -69,6 +69,10 @@ void pwmWriteDigital(uint8_t index, uint16_t value) motorDmaOutput_t * const motor = &dmaMotors[index]; + if (!motor->timerHardware->dmaStream) { + return; + } + uint16_t packet = (value << 1) | (motor->requestTelemetry ? 1 : 0); motor->requestTelemetry = false; // reset telemetry request to make sure it's triggered only once in a row @@ -88,7 +92,7 @@ void pwmWriteDigital(uint8_t index, uint16_t value) packet <<= 1; } - if( HAL_TIM_PWM_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) + if(HAL_TIM_PWM_Start_DMA(&motor->TimHandle, motor->timerHardware->channel, motor->dmaBuffer, MOTOR_DMA_BUFFER_SIZE) != HAL_OK) { /* Starting PWM generation Error */ return;