#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
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) |
void
ao_beep_init(void)
{
- ao_enable_port(BEEPER_PORT);
#if BEEPER_TIMER == 2
if (BEEPER_PORT == &stm_gpioa) {
switch (BEEPER_PIN) {
}
}
#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);