#include #include #ifndef CLOCKS_H #define CLOCKS_H typedef enum { CLOCK_PLL1 = 0, CLOCK_PLL2 = 1, CLOCK_PLL3 = 2, } clock_pll_t; typedef enum { CLOCK_SOURCE_HSI = 0, CLOCK_SOURCE_HSE = 1, CLOCK_SOURCE_CSI = 2, CLOCK_SOURCE_PLL_1_P_CK = 3, } sysclock_source_t; typedef enum { PLL_SOURCE_HSI = 0, PLL_SOURCE_CSI = 1, PLL_SOURCE_HSE = 2, PLL_SOURCE_NONE = 3, } pll_source_t; typedef enum { CLOCK_HSI, CLOCK_HSE, CLOCK_HSI48, } clock_t; void clocks_enable(clock_t clock); bool clocks_ready(clock_t clock); void clocks_wait_ready(clock_t clock); void clocks_pll_configure(clock_pll_t pll, uint8_t vcosel, uint8_t divm, pll_source_t source, uint16_t divn, uint8_t divp, uint8_t divq, uint8_t divr); void clocks_pll_enable(clock_pll_t pll); void clocks_pll_disable(clock_pll_t pll); void clocks_pll_wait_ready(clock_pll_t pll, uint16_t timeout_us); void clocks_system_clock_source(sysclock_source_t source, uint8_t d1cpre, uint8_t d1ppre, uint8_t hpre, uint16_t timeout_us); #endif // CLOCKS_H