X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm32f1%2Fao_beep_stm.c;h=02c8d91c7ddac0a46700e296bd39f8ef0058c2a6;hb=43d1cfd0d1458c2d4c333155902be28bfe17b6ee;hp=73bdb8cf0413a9ebf0f5ed56338ec7989340f50c;hpb=1cad5ca2525fbe067f897871bc2c4dc45a13e85a;p=fw%2Faltos diff --git a/src/stm32f1/ao_beep_stm.c b/src/stm32f1/ao_beep_stm.c index 73bdb8cf..02c8d91c 100644 --- a/src/stm32f1/ao_beep_stm.c +++ b/src/stm32f1/ao_beep_stm.c @@ -22,15 +22,12 @@ #if BEEPER_TIMER == 2 #define stm_beeper stm_tim2 #define RCC_BEEPER STM_RCC_APB1ENR_TIM2EN -#define BEEPER_AFR STM_AFR_AF1 #elif BEEPER_TIMER == 3 #define stm_beeper stm_tim3 #define RCC_BEEPER STM_RCC_APB1ENR_TIM3EN -#define BEEPER_AFR STM_AFR_AF2 #elif BEEPER_TIMER == 4 #define stm_beeper stm_tim4 #define RCC_BEEPER STM_RCC_APB1ENR_TIM4EN -#define BEEPER_AFR STM_AFR_AF2 #else #error BEEPER_TIMER must be 2, 3 or 4 #endif @@ -41,7 +38,13 @@ ao_beep(uint8_t beep) if (beep == 0) { stm_beeper.cr1 = 0; stm_rcc.apb1enr &= ~(1UL << RCC_BEEPER); + stm_gpio_conf(BEEPER_PORT, BEEPER_PIN, + STM_GPIO_CR_MODE_OUTPUT_2MHZ, + STM_GPIO_CR_CNF_OUTPUT_PUSH_PULL); } else { + stm_gpio_conf(BEEPER_PORT, BEEPER_PIN, + STM_GPIO_CR_MODE_OUTPUT_2MHZ, + STM_GPIO_CR_CNF_OUTPUT_AF_PUSH_PULL); stm_rcc.apb1enr |= (1UL << RCC_BEEPER); stm_beeper.cr2 = ((0 << STM_TIM234_CR2_TI1S) | @@ -158,7 +161,6 @@ ao_beep_for(uint8_t beep, AO_TICK_TYPE ticks) void ao_beep_init(void) { - ao_enable_port(BEEPER_PORT); #if BEEPER_TIMER == 2 if (BEEPER_PORT == &stm_gpioa) { switch (BEEPER_PIN) { @@ -176,13 +178,51 @@ ao_beep_init(void) } } #elif BEEPER_TIMER == 3 - ao_panic(AO_PANIC_CRASH); + if (BEEPER_PORT == &stm_gpioa) { + switch (BEEPER_PIN) { + case 6: + case 7: + stm_set_afio_mapr(STM_AFIO_MAPR_TIM3_REMAP, + STM_AFIO_MAPR_TIM3_REMAP_PA6_PA7_PB0_PB1, + STM_AFIO_MAPR_TIM3_REMAP_MASK); + break; + default: + ao_panic(AO_PANIC_CRASH); + break; + } + } else if (BEEPER_PORT == &stm_gpiob) { + switch (BEEPER_PIN) { + case 4: + case 5: + case 0: + case 1: + stm_set_afio_mapr(STM_AFIO_MAPR_TIM3_REMAP, + STM_AFIO_MAPR_TIM3_REMAP_PB4_PB5_PB0_PB1, + STM_AFIO_MAPR_TIM3_REMAP_MASK); + break; + default: + ao_panic(AO_PANIC_CRASH); + break; + } + } else if (BEEPER_PORT == &stm_gpioc) { + switch (BEEPER_PIN) { + case 6: + case 7: + case 8: + case 9: + stm_set_afio_mapr(STM_AFIO_MAPR_TIM3_REMAP, + STM_AFIO_MAPR_TIM3_REMAP_PC6_PC7_PC8_PC9, + STM_AFIO_MAPR_TIM3_REMAP_MASK); + break; + default: + ao_panic(AO_PANIC_CRASH); + break; + } + } #elif BEEPER_TIMER == 4 ao_panic(AO_PANIC_CRASH); #endif - stm_gpio_conf(BEEPER_PORT, BEEPER_PIN, - STM_GPIO_CR_MODE_OUTPUT_2MHZ, - STM_GPIO_CR_CNF_OUTPUT_AF_PUSH_PULL); + ao_enable_output(BEEPER_PORT, BEEPER_PIN, 0); /* Leave the timer off until requested */ stm_rcc.apb1enr &= ~(1UL << RCC_BEEPER);