summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2018-10-13 13:42:34 -0700
committerKeith Packard <keithp@keithp.com>2018-10-19 08:38:32 -0700
commitdbc52686c6d9808275c35e0c9c987cbbd9f7859d (patch)
tree0255c33591abdc770c39e658478b6d0a9f54e4b9
parent80affca535c5c43a5d9963dfafc74f9675c9b155 (diff)
altos/stm: Make beeper driver support all possible tim234 configs
And update all users to be explicit about the desired config. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/easymega-v1.0/ao_pins.h4
-rw-r--r--src/easymega-v2.0/ao_pins.h4
-rw-r--r--src/stm/ao_beep_stm.c166
-rw-r--r--src/stm/stm32l.h15
-rw-r--r--src/teleballoon-v2.0/ao_pins.h3
-rw-r--r--src/telefireeight-v1.0/ao_pins.h4
-rw-r--r--src/telefireone-v1.0/ao_pins.h1
-rw-r--r--src/telefiretwo-v0.2/ao_pins.h1
-rw-r--r--src/telelco-v0.2-cc1200/ao_pins.h4
-rw-r--r--src/telelco-v0.2/ao_pins.h4
-rw-r--r--src/telelco-v0.3/ao_pins.h4
-rw-r--r--src/telelco-v2.0/ao_pins.h4
-rw-r--r--src/telelcotwo-v0.1/ao_pins.h3
-rw-r--r--src/telemega-v0.1/ao_pins.h4
-rw-r--r--src/telemega-v1.0/ao_pins.h4
-rw-r--r--src/telemega-v2.0/ao_pins.h4
-rw-r--r--src/telemega-v3.0/ao_pins.h4
-rw-r--r--src/telemetrum-v2.0/ao_pins.h3
-rw-r--r--src/telemetrum-v3.0/ao_pins.h3
-rw-r--r--src/telemini-v3.0/ao_pins.h4
20 files changed, 150 insertions, 93 deletions
diff --git a/src/easymega-v1.0/ao_pins.h b/src/easymega-v1.0/ao_pins.h
index e7382e4b..bfa777c6 100644
--- a/src/easymega-v1.0/ao_pins.h
+++ b/src/easymega-v1.0/ao_pins.h
@@ -77,6 +77,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 0
#define HAS_TELEMETRY 0
diff --git a/src/easymega-v2.0/ao_pins.h b/src/easymega-v2.0/ao_pins.h
index aff06cdd..508c043c 100644
--- a/src/easymega-v2.0/ao_pins.h
+++ b/src/easymega-v2.0/ao_pins.h
@@ -77,6 +77,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 2
+#define BEEPER_CHANNEL 3
+#define BEEPER_PORT (&stm_gpioa)
+#define BEEPER_PIN 2
#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 0
#define HAS_TELEMETRY 0
diff --git a/src/stm/ao_beep_stm.c b/src/stm/ao_beep_stm.c
index f9fa14c2..2746d7f8 100644
--- a/src/stm/ao_beep_stm.c
+++ b/src/stm/ao_beep_stm.c
@@ -18,37 +18,59 @@
#include "ao.h"
-#ifndef BEEPER_CHANNEL
-#define BEEPER_CHANNEL 1
+#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
void
ao_beep(uint8_t beep)
{
if (beep == 0) {
- stm_tim3.cr1 = 0;
- stm_rcc.apb1enr &= ~(1 << STM_RCC_APB1ENR_TIM3EN);
+ stm_beeper.cr1 = 0;
+ stm_rcc.apb1enr &= ~(1 << RCC_BEEPER);
} else {
- stm_rcc.apb1enr |= (1 << STM_RCC_APB1ENR_TIM3EN);
+ stm_rcc.apb1enr |= (1 << RCC_BEEPER);
- stm_tim3.cr2 = ((0 << STM_TIM234_CR2_TI1S) |
+ stm_beeper.cr2 = ((0 << STM_TIM234_CR2_TI1S) |
(STM_TIM234_CR2_MMS_RESET << STM_TIM234_CR2_MMS) |
(0 << STM_TIM234_CR2_CCDS));
/* Set prescaler to match cc1111 clocks
*/
- stm_tim3.psc = AO_TIM23467_CLK / 750000;
+ stm_beeper.psc = AO_TIM23467_CLK / 750000;
/* 1. Select the counter clock (internal, external, prescaler).
*
* Setting SMCR to zero means use the internal clock
*/
- stm_tim3.smcr = 0;
+ stm_beeper.smcr = 0;
/* 2. Write the desired data in the TIMx_ARR and TIMx_CCRx registers. */
- stm_tim3.arr = beep;
- stm_tim3.ccr1 = beep;
+ stm_beeper.arr = beep;
+#if BEEPER_CHANNEL == 1
+ stm_beeper.ccr1 = beep;
+#elif BEEPER_CHANNEL == 2
+ stm_beeper.ccr2 = beep;
+#elif BEEPER_CHANNEL == 3
+ stm_beeper.ccr3 = beep;
+#elif BEEPER_CHANNEL == 4
+ stm_beeper.ccr4 = beep;
+#else
+#error invalid BEEPER_CHANNEL
+#endif
/* 3. Set the CCxIE and/or CCxDE bits if an interrupt and/or a
* DMA request is to be generated.
@@ -61,63 +83,56 @@ ao_beep(uint8_t beep)
* is enabled and active high.
*/
-#if BEEPER_CHANNEL == 1
- stm_tim3.ccmr1 = ((0 << STM_TIM234_CCMR1_OC2CE) |
- (STM_TIM234_CCMR1_OC2M_FROZEN << STM_TIM234_CCMR1_OC2M) |
- (0 << STM_TIM234_CCMR1_OC2PE) |
- (0 << STM_TIM234_CCMR1_OC2FE) |
- (STM_TIM234_CCMR1_CC2S_OUTPUT << STM_TIM234_CCMR1_CC2S) |
-
- (0 << STM_TIM234_CCMR1_OC1CE) |
- (STM_TIM234_CCMR1_OC1M_TOGGLE << STM_TIM234_CCMR1_OC1M) |
- (0 << STM_TIM234_CCMR1_OC1PE) |
- (0 << STM_TIM234_CCMR1_OC1FE) |
- (STM_TIM234_CCMR1_CC1S_OUTPUT << STM_TIM234_CCMR1_CC1S));
-
- stm_tim3.ccer = ((0 << STM_TIM234_CCER_CC4NP) |
- (0 << STM_TIM234_CCER_CC4P) |
- (0 << STM_TIM234_CCER_CC4E) |
- (0 << STM_TIM234_CCER_CC3NP) |
- (0 << STM_TIM234_CCER_CC3P) |
- (0 << STM_TIM234_CCER_CC3E) |
- (0 << STM_TIM234_CCER_CC2NP) |
- (0 << STM_TIM234_CCER_CC2P) |
- (0 << STM_TIM234_CCER_CC2E) |
- (0 << STM_TIM234_CCER_CC1NP) |
- (0 << STM_TIM234_CCER_CC1P) |
- (1 << STM_TIM234_CCER_CC1E));
+#define OC1M (BEEPER_CHANNEL == 1 ? STM_TIM234_CCMR1_OC1M_TOGGLE : STM_TIM234_CCMR1_OC1M_FROZEN)
+#define OC2M (BEEPER_CHANNEL == 2 ? STM_TIM234_CCMR1_OC2M_TOGGLE : STM_TIM234_CCMR1_OC2M_FROZEN)
+#define OC3M (BEEPER_CHANNEL == 3 ? STM_TIM234_CCMR2_OC3M_TOGGLE : STM_TIM234_CCMR2_OC3M_FROZEN)
+#define OC4M (BEEPER_CHANNEL == 4 ? STM_TIM234_CCMR2_OC4M_TOGGLE : STM_TIM234_CCMR2_OC4M_FROZEN)
+
+#define CCER(n) (BEEPER_CHANNEL == (n) ? 1 : 0)
+
+#if BEEPER_CHANNEL == 1 || BEEPER_CHANNEL == 2
+ stm_beeper.ccmr1 = ((0 << STM_TIM234_CCMR1_OC2CE) |
+ (OC2M << STM_TIM234_CCMR1_OC2M) |
+ (0 << STM_TIM234_CCMR1_OC2PE) |
+ (0 << STM_TIM234_CCMR1_OC2FE) |
+ (STM_TIM234_CCMR1_CC2S_OUTPUT << STM_TIM234_CCMR1_CC2S) |
+
+ (0 << STM_TIM234_CCMR1_OC1CE) |
+ (OC1M << STM_TIM234_CCMR1_OC1M) |
+ (0 << STM_TIM234_CCMR1_OC1PE) |
+ (0 << STM_TIM234_CCMR1_OC1FE) |
+ (STM_TIM234_CCMR1_CC1S_OUTPUT << STM_TIM234_CCMR1_CC1S));
+#elif BEEPER_CHANNEL == 3 || BEEPER_CHANNEL == 4
+ stm_beeper.ccmr2 = ((0 << STM_TIM234_CCMR2_OC4CE) |
+ (OC4M << STM_TIM234_CCMR2_OC4M) |
+ (0 << STM_TIM234_CCMR2_OC4PE) |
+ (0 << STM_TIM234_CCMR2_OC4FE) |
+ (STM_TIM234_CCMR2_CC4S_OUTPUT << STM_TIM234_CCMR2_CC4S) |
+
+ (0 << STM_TIM234_CCMR2_OC3CE) |
+ (OC3M << STM_TIM234_CCMR2_OC3M) |
+ (0 << STM_TIM234_CCMR2_OC3PE) |
+ (0 << STM_TIM234_CCMR2_OC3FE) |
+ (STM_TIM234_CCMR2_CC3S_OUTPUT << STM_TIM234_CCMR2_CC3S));
+#else
+#error invalid BEEPER_CHANNEL
#endif
-#if BEEPER_CHANNEL == 4
- stm_tim3.ccmr2 = ((0 << STM_TIM234_CCMR2_OC4CE) |
- (STM_TIM234_CCMR2_OC4M_TOGGLE << STM_TIM234_CCMR2_OC4M) |
- (0 << STM_TIM234_CCMR2_OC4PE) |
- (0 << STM_TIM234_CCMR2_OC4FE) |
- (STM_TIM234_CCMR2_CC4S_OUTPUT << STM_TIM234_CCMR2_CC4S) |
-
- (0 << STM_TIM234_CCMR2_OC3CE) |
- (STM_TIM234_CCMR2_OC3M_FROZEN << STM_TIM234_CCMR2_OC3M) |
- (0 << STM_TIM234_CCMR2_OC3PE) |
- (0 << STM_TIM234_CCMR2_OC3FE) |
- (STM_TIM234_CCMR2_CC3S_OUTPUT << STM_TIM234_CCMR2_CC3S));
-
- stm_tim3.ccer = ((0 << STM_TIM234_CCER_CC4NP) |
- (0 << STM_TIM234_CCER_CC4P) |
- (1 << STM_TIM234_CCER_CC4E) |
- (0 << STM_TIM234_CCER_CC3NP) |
- (0 << STM_TIM234_CCER_CC3P) |
- (0 << STM_TIM234_CCER_CC3E) |
- (0 << STM_TIM234_CCER_CC2NP) |
- (0 << STM_TIM234_CCER_CC2P) |
- (0 << STM_TIM234_CCER_CC2E) |
- (0 << STM_TIM234_CCER_CC1NP) |
- (0 << STM_TIM234_CCER_CC1P) |
- (0 << STM_TIM234_CCER_CC1E));
-#endif
-
+ stm_beeper.ccer = ((0 << STM_TIM234_CCER_CC4NP) |
+ (0 << STM_TIM234_CCER_CC4P) |
+ (CCER(4) << STM_TIM234_CCER_CC4E) |
+ (0 << STM_TIM234_CCER_CC3NP) |
+ (0 << STM_TIM234_CCER_CC3P) |
+ (CCER(3) << STM_TIM234_CCER_CC3E) |
+ (0 << STM_TIM234_CCER_CC2NP) |
+ (0 << STM_TIM234_CCER_CC2P) |
+ (CCER(2) << STM_TIM234_CCER_CC2E) |
+ (0 << STM_TIM234_CCER_CC1NP) |
+ (0 << STM_TIM234_CCER_CC1P) |
+ (CCER(1) << STM_TIM234_CCER_CC1E));
/* 5. Enable the counter by setting the CEN bit in the TIMx_CR1 register. */
- stm_tim3.cr1 = ((STM_TIM234_CR1_CKD_1 << STM_TIM234_CR1_CKD) |
+ stm_beeper.cr1 = ((STM_TIM234_CR1_CKD_1 << STM_TIM234_CR1_CKD) |
(0 << STM_TIM234_CR1_ARPE) |
(STM_TIM234_CR1_CMS_EDGE << STM_TIM234_CR1_CMS) |
(0 << STM_TIM234_CR1_DIR) |
@@ -127,12 +142,12 @@ ao_beep(uint8_t beep)
(1 << STM_TIM234_CR1_CEN));
/* Update the values */
- stm_tim3.egr = (1 << STM_TIM234_EGR_UG);
+ stm_beeper.egr = (1 << STM_TIM234_EGR_UG);
}
}
void
-ao_beep_for(uint8_t beep, uint16_t ticks)
+ao_beep_for(uint8_t beep, uint16_t ticks)
{
ao_beep(beep);
ao_delay(ticks);
@@ -142,24 +157,9 @@ ao_beep_for(uint8_t beep, uint16_t ticks)
void
ao_beep_init(void)
{
-#if BEEPER_CHANNEL == 1
-
- /* Our beeper is on PC6, which is hooked to TIM3_CH1.
- */
- stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIOCEN);
-
- stm_afr_set(&stm_gpioc, 6, STM_AFR_AF2);
-#endif
-#if BEEPER_CHANNEL == 4
-
- /* Our beeper is on PB1, which is hooked to TIM3_CH4.
- */
- stm_rcc.ahbenr |= (1 << STM_RCC_AHBENR_GPIOBEN);
-
- stm_afr_set(&stm_gpiob, 1, STM_AFR_AF2);
-#endif
+ ao_enable_port(BEEPER_PORT);
+ stm_afr_set(BEEPER_PORT, BEEPER_PIN, BEEPER_AFR);
/* Leave the timer off until requested */
-
- stm_rcc.apb1enr &= ~(1 << STM_RCC_APB1ENR_TIM3EN);
+ stm_rcc.apb1enr &= ~(1 << RCC_BEEPER);
}
diff --git a/src/stm/stm32l.h b/src/stm/stm32l.h
index 1da817e7..0109ec81 100644
--- a/src/stm/stm32l.h
+++ b/src/stm/stm32l.h
@@ -241,15 +241,14 @@ stm_gpio_get_all(struct stm_gpio *gpio) {
* ao_enable_gpio macro will expand into a huge pile of code
* as the compiler won't do correct constant folding and
* dead-code elimination
+ */
- extern struct stm_gpio stm_gpioa;
- extern struct stm_gpio stm_gpiob;
- extern struct stm_gpio stm_gpioc;
- extern struct stm_gpio stm_gpiod;
- extern struct stm_gpio stm_gpioe;
- extern struct stm_gpio stm_gpioh;
-
-*/
+extern struct stm_gpio stm_gpioa;
+extern struct stm_gpio stm_gpiob;
+extern struct stm_gpio stm_gpioc;
+extern struct stm_gpio stm_gpiod;
+extern struct stm_gpio stm_gpioe;
+extern struct stm_gpio stm_gpioh;
#define stm_gpioh (*((struct stm_gpio *) 0x40021400))
#define stm_gpioe (*((struct stm_gpio *) 0x40021000))
diff --git a/src/teleballoon-v2.0/ao_pins.h b/src/teleballoon-v2.0/ao_pins.h
index 4f27bad6..cb0ec838 100644
--- a/src/teleballoon-v2.0/ao_pins.h
+++ b/src/teleballoon-v2.0/ao_pins.h
@@ -74,6 +74,9 @@
#define HAS_BEEP 1
#define HAS_BATTERY_REPORT 1
#define BEEPER_CHANNEL 4
+#define BEEPER_TIMER 3
+#define BEEPER_PORT (&stm_gpiob)
+#define BEEPER_PIN 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
#define HAS_APRS 1
diff --git a/src/telefireeight-v1.0/ao_pins.h b/src/telefireeight-v1.0/ao_pins.h
index ef533b36..c15e06bf 100644
--- a/src/telefireeight-v1.0/ao_pins.h
+++ b/src/telefireeight-v1.0/ao_pins.h
@@ -25,6 +25,10 @@
#define HAS_FLIGHT 0
#define HAS_USB 1
#define HAS_BEEP 0
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_GPS 0
#define HAS_SERIAL_1 0
#define HAS_ADC 1
diff --git a/src/telefireone-v1.0/ao_pins.h b/src/telefireone-v1.0/ao_pins.h
index d36d9d82..15b158ef 100644
--- a/src/telefireone-v1.0/ao_pins.h
+++ b/src/telefireone-v1.0/ao_pins.h
@@ -27,6 +27,7 @@
#define HAS_USB 1
#define HAS_BEEP 1
#define BEEPER_CHANNEL 4
+#define BEEPER_TIMER 3
#define HAS_GPS 0
#define HAS_SERIAL_1 0
#define HAS_ADC 1
diff --git a/src/telefiretwo-v0.2/ao_pins.h b/src/telefiretwo-v0.2/ao_pins.h
index 469e9937..01faace2 100644
--- a/src/telefiretwo-v0.2/ao_pins.h
+++ b/src/telefiretwo-v0.2/ao_pins.h
@@ -27,6 +27,7 @@
#define HAS_USB 1
#define HAS_BEEP 1
#define BEEPER_CHANNEL 4
+#define BEEPER_TIMER 3
#define HAS_GPS 0
#define HAS_SERIAL_1 0
#define HAS_ADC 1
diff --git a/src/telelco-v0.2-cc1200/ao_pins.h b/src/telelco-v0.2-cc1200/ao_pins.h
index bc325e06..f3850ebd 100644
--- a/src/telelco-v0.2-cc1200/ao_pins.h
+++ b/src/telelco-v0.2-cc1200/ao_pins.h
@@ -50,6 +50,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_RADIO 1
#define HAS_RADIO_RATE 1
#define HAS_TELEMETRY 0
diff --git a/src/telelco-v0.2/ao_pins.h b/src/telelco-v0.2/ao_pins.h
index f0da4fe4..3d06a647 100644
--- a/src/telelco-v0.2/ao_pins.h
+++ b/src/telelco-v0.2/ao_pins.h
@@ -48,6 +48,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_RADIO 1
#define HAS_RADIO_RATE 1
#define HAS_TELEMETRY 0
diff --git a/src/telelco-v0.3/ao_pins.h b/src/telelco-v0.3/ao_pins.h
index 6023739c..c806268f 100644
--- a/src/telelco-v0.3/ao_pins.h
+++ b/src/telelco-v0.3/ao_pins.h
@@ -50,6 +50,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_RADIO 1
#define HAS_RADIO_RATE 1
#define HAS_TELEMETRY 0
diff --git a/src/telelco-v2.0/ao_pins.h b/src/telelco-v2.0/ao_pins.h
index ea709c1d..e0663314 100644
--- a/src/telelco-v2.0/ao_pins.h
+++ b/src/telelco-v2.0/ao_pins.h
@@ -50,6 +50,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_RADIO 1
#define HAS_RADIO_RATE 1
#define HAS_TELEMETRY 0
diff --git a/src/telelcotwo-v0.1/ao_pins.h b/src/telelcotwo-v0.1/ao_pins.h
index 1941e03d..3ef88c74 100644
--- a/src/telelcotwo-v0.1/ao_pins.h
+++ b/src/telelcotwo-v0.1/ao_pins.h
@@ -51,6 +51,9 @@
#define HAS_USB 1
#define HAS_BEEP 1
#define BEEPER_CHANNEL 4
+#define BEEPER_TIMER 3
+#define BEEPER_PORT (&stm_gpiob)
+#define BEEPER_PIN 1
#define HAS_RADIO 1
#define HAS_RADIO_RATE 1
#define HAS_TELEMETRY 0
diff --git a/src/telemega-v0.1/ao_pins.h b/src/telemega-v0.1/ao_pins.h
index 64535c30..0208fafa 100644
--- a/src/telemega-v0.1/ao_pins.h
+++ b/src/telemega-v0.1/ao_pins.h
@@ -77,6 +77,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
diff --git a/src/telemega-v1.0/ao_pins.h b/src/telemega-v1.0/ao_pins.h
index 354da6a4..a154225e 100644
--- a/src/telemega-v1.0/ao_pins.h
+++ b/src/telemega-v1.0/ao_pins.h
@@ -77,6 +77,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
diff --git a/src/telemega-v2.0/ao_pins.h b/src/telemega-v2.0/ao_pins.h
index 46207884..ba302c74 100644
--- a/src/telemega-v2.0/ao_pins.h
+++ b/src/telemega-v2.0/ao_pins.h
@@ -77,6 +77,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
diff --git a/src/telemega-v3.0/ao_pins.h b/src/telemega-v3.0/ao_pins.h
index ddcd0eb9..ce223907 100644
--- a/src/telemega-v3.0/ao_pins.h
+++ b/src/telemega-v3.0/ao_pins.h
@@ -77,6 +77,10 @@
#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
+#define BEEPER_TIMER 3
+#define BEEPER_CHANNEL 1
+#define BEEPER_PORT (&stm_gpioc)
+#define BEEPER_PIN 6
#define HAS_BATTERY_REPORT 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
diff --git a/src/telemetrum-v2.0/ao_pins.h b/src/telemetrum-v2.0/ao_pins.h
index 47f6dd2a..e8c97ff4 100644
--- a/src/telemetrum-v2.0/ao_pins.h
+++ b/src/telemetrum-v2.0/ao_pins.h
@@ -74,6 +74,9 @@
#define HAS_BEEP 1
#define HAS_BATTERY_REPORT 1
#define BEEPER_CHANNEL 4
+#define BEEPER_TIMER 3
+#define BEEPER_PORT (&stm_gpiob)
+#define BEEPER_PIN 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
#define HAS_APRS 1
diff --git a/src/telemetrum-v3.0/ao_pins.h b/src/telemetrum-v3.0/ao_pins.h
index a8043bba..f4ccc9f3 100644
--- a/src/telemetrum-v3.0/ao_pins.h
+++ b/src/telemetrum-v3.0/ao_pins.h
@@ -74,6 +74,9 @@
#define HAS_BEEP 1
#define HAS_BATTERY_REPORT 1
#define BEEPER_CHANNEL 4
+#define BEEPER_TIMER 3
+#define BEEPER_PORT (&stm_gpiob)
+#define BEEPER_PIN 1
#define HAS_RADIO 1
#define HAS_TELEMETRY 1
#define HAS_APRS 1
diff --git a/src/telemini-v3.0/ao_pins.h b/src/telemini-v3.0/ao_pins.h
index 546d91e0..d91b1d21 100644
--- a/src/telemini-v3.0/ao_pins.h
+++ b/src/telemini-v3.0/ao_pins.h
@@ -74,9 +74,9 @@
#define AO_RECOVERY_VALUE 0
#define AO_RECOVERY_MODE AO_EXTI_MODE_PULL_UP
-/* Beeper is on Tim1 CH3 */
+/* Beeper is on Tim3 CH4 */
#define BEEPER_CHANNEL 4
-#define BEEPER_TIMER 2
+#define BEEPER_TIMER 3
#define BEEPER_PORT (&stm_gpioa)
#define BEEPER_PIN 3