diff --git a/src/main/drivers/pwm_output.c b/src/main/drivers/pwm_output.c index 9d6f57bc00..e6d735568d 100644 --- a/src/main/drivers/pwm_output.c +++ b/src/main/drivers/pwm_output.c @@ -469,37 +469,42 @@ void servoDevInit(const servoDevConfig_t *servoConfig) #ifdef USE_BEEPER void pwmWriteBeeper(bool onoffBeep) { - if (!beeperPwm.io) - return; - if (onoffBeep == true) { - *beeperPwm.channel.ccr = (PWM_TIMER_1MHZ / freqBeep) / 2; - beeperPwm.enabled = true; - } else { - *beeperPwm.channel.ccr = 0; - beeperPwm.enabled = false; - } + if (!beeperPwm.io) { + return; + } + + if (onoffBeep == true) { + *beeperPwm.channel.ccr = (PWM_TIMER_1MHZ / freqBeep) / 2; + beeperPwm.enabled = true; + } else { + *beeperPwm.channel.ccr = 0; + beeperPwm.enabled = false; + } } void pwmToggleBeeper(void) { - pwmWriteBeeper(!beeperPwm.enabled); + pwmWriteBeeper(!beeperPwm.enabled); } void beeperPwmInit(const ioTag_t tag, uint16_t frequency) { - beeperPwm.io = IOGetByTag(tag); - const timerHardware_t *timer = timerGetByTag(tag, TIM_USE_BEEPER); - if (beeperPwm.io && timer) { - IOInit(beeperPwm.io, OWNER_BEEPER, RESOURCE_INDEX(0)); + const timerHardware_t *timer = timerGetByTag(tag, TIM_USE_BEEPER); + IO_t beeperIO = IOGetByTag(tag); + + if (beeperIO && timer) { + beeperPwm.io = beeperIO; + IOInit(beeperPwm.io, OWNER_BEEPER, RESOURCE_INDEX(0)); #if defined(USE_HAL_DRIVER) - IOConfigGPIOAF(beeperPwm.io, IOCFG_AF_PP, timer->alternateFunction); + IOConfigGPIOAF(beeperPwm.io, IOCFG_AF_PP, timer->alternateFunction); #else - IOConfigGPIO(beeperPwm.io, IOCFG_AF_PP); + IOConfigGPIO(beeperPwm.io, IOCFG_AF_PP); #endif - freqBeep = frequency; - pwmOutConfig(&beeperPwm.channel, timer, PWM_TIMER_1MHZ, PWM_TIMER_1MHZ / freqBeep, (PWM_TIMER_1MHZ / freqBeep) / 2, 0); - } + freqBeep = frequency; + pwmOutConfig(&beeperPwm.channel, timer, PWM_TIMER_1MHZ, PWM_TIMER_1MHZ / freqBeep, (PWM_TIMER_1MHZ / freqBeep) / 2, 0); + *beeperPwm.channel.ccr = 0; beeperPwm.enabled = false; + } } #endif diff --git a/src/main/fc/config.c b/src/main/fc/config.c index 40e8ab6c95..ba5f655416 100644 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -50,6 +50,7 @@ #include "io/serial.h" #include "pg/beeper.h" +#include "pg/beeper_dev.h" #include "pg/pg.h" #include "pg/pg_ids.h" @@ -356,6 +357,12 @@ static void validateAndFixConfig(void) featureClear(FEATURE_RSSI_ADC); #endif +#if defined(USE_BEEPER) + if (beeperDevConfig()->frequency && !timerGetByTag(beeperDevConfig()->ioTag, TIM_USE_BEEPER)) { + beeperDevConfigMutable()->frequency = 0; + } +#endif + #if defined(TARGET_VALIDATECONFIG) targetValidateConfiguration(); #endif