diff --git a/cpu/stm32_common/cpu_common.c b/cpu/stm32_common/cpu_common.c
index 7f6b0320a79c8c48711ad9a9dee0e246060f282e..12dac29d8d7838f0bf449e1fff0b7d84657a84dd 100644
--- a/cpu/stm32_common/cpu_common.c
+++ b/cpu/stm32_common/cpu_common.c
@@ -18,8 +18,19 @@
  * @}
  */
 
+#include "periph_conf.h"
 #include "periph_cpu_common.h"
 
+uint32_t periph_apb_clk(uint8_t bus)
+{
+    if (bus == APB1) {
+        return CLOCK_APB1;
+    }
+    else {
+        return CLOCK_APB2;
+    }
+}
+
 void periph_clk_en(uint8_t bus, uint32_t mask)
 {
     if (bus == APB1) {
diff --git a/cpu/stm32_common/include/periph_cpu_common.h b/cpu/stm32_common/include/periph_cpu_common.h
index e9abc3a0a50842addd5ac8ae978436b3bd48d296..7c72a5bd50c0382011435cb1a1c35aa202b7b7dc 100644
--- a/cpu/stm32_common/include/periph_cpu_common.h
+++ b/cpu/stm32_common/include/periph_cpu_common.h
@@ -65,6 +65,26 @@ typedef uint32_t gpio_t;
  */
 #define GPIO_PIN(x, y)      ((GPIOA_BASE + (x << 10)) | y)
 
+/**
+ * @brief   Timer configuration
+ */
+typedef struct {
+    TIM_TypeDef *dev;       /**< timer device */
+    uint32_t max;           /**< maximum value to count to (16/32 bit) */
+    uint32_t rcc_mask;      /**< corresponding bit in the RCC register */
+    uint8_t bus;            /**< APBx bus the timer is clock from */
+    uint8_t irqn;           /**< global IRQ channel */
+} timer_conf_t;
+
+/**
+ * @brief   Get the actual bus clock frequency for the APB buses
+ *
+ * @param[in] bus       target APBx bus
+ *
+ * @return              bus clock frequency in Hz
+ */
+uint32_t periph_apb_clk(uint8_t bus);
+
 /**
  * @brief   Enable the given peripheral clock
  *