diff --git a/src/main/main.c b/src/main/main.c index d99a40fdc8..cbf0e50be8 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -178,6 +178,42 @@ void init(void) timerInit(); // timer must be initialized before any channel is allocated + memset(&pwm_params, 0, sizeof(pwm_params)); + // when using airplane/wing mixer, servo/motor outputs are remapped + if (masterConfig.mixerMode == MIXER_AIRPLANE || masterConfig.mixerMode == MIXER_FLYING_WING) + pwm_params.airplane = true; + else + pwm_params.airplane = false; +#if defined(USE_USART2) && defined(STM32F10X) + pwm_params.useUART2 = doesConfigurationUsePort(SERIAL_PORT_USART2); +#endif + pwm_params.useVbat = feature(FEATURE_VBAT); + pwm_params.useSoftSerial = feature(FEATURE_SOFTSERIAL); + pwm_params.useParallelPWM = feature(FEATURE_RX_PARALLEL_PWM); + pwm_params.useRSSIADC = feature(FEATURE_RSSI_ADC); + pwm_params.useCurrentMeterADC = feature(FEATURE_CURRENT_METER) + && masterConfig.batteryConfig.currentMeterType == CURRENT_SENSOR_ADC; + pwm_params.useLEDStrip = feature(FEATURE_LED_STRIP); + pwm_params.usePPM = feature(FEATURE_RX_PPM); + pwm_params.useOneshot = feature(FEATURE_ONESHOT125); + pwm_params.useSerialRx = feature(FEATURE_RX_SERIAL); + pwm_params.useServos = isMixerUsingServos(); + pwm_params.extraServos = currentProfile->gimbalConfig.gimbal_flags & GIMBAL_FORWARDAUX; + pwm_params.motorPwmRate = masterConfig.motor_pwm_rate; + pwm_params.servoPwmRate = masterConfig.servo_pwm_rate; + pwm_params.idlePulse = PULSE_1MS; // standard PWM for brushless ESC (default, overridden below) + if (feature(FEATURE_3D)) + pwm_params.idlePulse = masterConfig.flight3DConfig.neutral3d; + if (pwm_params.motorPwmRate > 500) + pwm_params.idlePulse = 0; // brushed motors + pwm_params.servoCenterPulse = masterConfig.escAndServoConfig.servoCenterPulse; + + pwmRxInit(masterConfig.inputFilteringMode); + + pwmOutputConfiguration_t *pwmOutputConfiguration = pwmInit(&pwm_params); + + mixerUsePWMOutputConfiguration(pwmOutputConfiguration); + #ifdef BEEPER beeperConfig_t beeperConfig = { .gpioPin = BEEP_PIN, @@ -289,42 +325,6 @@ void init(void) serialInit(&masterConfig.serialConfig); - memset(&pwm_params, 0, sizeof(pwm_params)); - // when using airplane/wing mixer, servo/motor outputs are remapped - if (masterConfig.mixerMode == MIXER_AIRPLANE || masterConfig.mixerMode == MIXER_FLYING_WING) - pwm_params.airplane = true; - else - pwm_params.airplane = false; -#if defined(USE_USART2) && defined(STM32F10X) - pwm_params.useUART2 = doesConfigurationUsePort(SERIAL_PORT_USART2); -#endif - pwm_params.useVbat = feature(FEATURE_VBAT); - pwm_params.useSoftSerial = feature(FEATURE_SOFTSERIAL); - pwm_params.useParallelPWM = feature(FEATURE_RX_PARALLEL_PWM); - pwm_params.useRSSIADC = feature(FEATURE_RSSI_ADC); - pwm_params.useCurrentMeterADC = feature(FEATURE_CURRENT_METER) - && masterConfig.batteryConfig.currentMeterType == CURRENT_SENSOR_ADC; - pwm_params.useLEDStrip = feature(FEATURE_LED_STRIP); - pwm_params.usePPM = feature(FEATURE_RX_PPM); - pwm_params.useOneshot = feature(FEATURE_ONESHOT125); - pwm_params.useSerialRx = feature(FEATURE_RX_SERIAL); - pwm_params.useServos = isMixerUsingServos(); - pwm_params.extraServos = currentProfile->gimbalConfig.gimbal_flags & GIMBAL_FORWARDAUX; - pwm_params.motorPwmRate = masterConfig.motor_pwm_rate; - pwm_params.servoPwmRate = masterConfig.servo_pwm_rate; - pwm_params.idlePulse = PULSE_1MS; // standard PWM for brushless ESC (default, overridden below) - if (feature(FEATURE_3D)) - pwm_params.idlePulse = masterConfig.flight3DConfig.neutral3d; - if (pwm_params.motorPwmRate > 500) - pwm_params.idlePulse = 0; // brushed motors - pwm_params.servoCenterPulse = masterConfig.escAndServoConfig.servoCenterPulse; - - pwmRxInit(masterConfig.inputFilteringMode); - - pwmOutputConfiguration_t *pwmOutputConfiguration = pwmInit(&pwm_params); - - mixerUsePWMOutputConfiguration(pwmOutputConfiguration); - failsafe = failsafeInit(&masterConfig.rxConfig); beepcodeInit(failsafe); rxInit(&masterConfig.rxConfig, failsafe);