61_Static_assert((
sizeof(
struct RCCRegs)) == (
sizeof(uint32_t) * 38U),
62 "RCC register struct size mismatch. Is it aligned?");
64#define RCC_PTR (struct RCCRegs *)RCC_BASE
78_Static_assert((
sizeof(
struct RCCPLLConfig)) == (
sizeof(uint8_t) * 4U),
79 "RCC PLL configuration struct size mismatch. Is it aligned?");
112 RCC_CLK_LP_FLITF = 15U,
116 RCC_CLK_CCMDATARAM = 20U,
120 RCC_CLK_ETHMAC = 25U,
129 RCC_CLK_CRYP = 32U + 4U,
148 RCC_CLK_WWDG = 96U + 11U,
149 RCC_CLK_SPI2 = 96U + 14U,
171 RCC_CLK_USART1 = 128U + 4U,
173 RCC_CLK_ADC1 = 128U + 8U,
180 RCC_CLK_TIM9 = 128U + 16U,
183 RCC_CLK_SPI5 = 128U + 20U,
187 RCC_CLK_LTDC = 128U + 26U,
195 RCC_APB_PRESCALER_DIV1 = 0x0,
196 RCC_APB_PRESCALER_DIV2 = 0x4,
197 RCC_APB_PRESCALER_DIV4 = 0x5,
198 RCC_APB_PRESCALER_DIV8 = 0x6,
199 RCC_APB_PRESCALER_DIV16 = 0x7,
206 RCC_AHB_PRESCALER_DIV1 = 0x0,
207 RCC_AHB_PRESCALER_DIV2 = 0x8,
208 RCC_AHB_PRESCALER_DIV4 = 0x9,
209 RCC_AHB_PRESCALER_DIV8 = 0xA,
210 RCC_AHB_PRESCALER_DIV16 = 0xB,
211 RCC_AHB_PRESCALER_DIV64 = 0xC,
212 RCC_AHB_PRESCALER_DIV128 = 0xD,
213 RCC_AHB_PRESCALER_DIV256 = 0xE,
214 RCC_AHB_PRESCALER_DIV512 = 0xF,
221 RCC_PLL_TARGET_PLL = 0x0,
222 RCC_PLL_TARGET_I2S = 0x1,
223 RCC_PLL_TARGET_SAI = 0x2,
230 RCC_SYSTEMCLOCK_SRC_HSI = 0x0,
231 RCC_SYSTEMCLOCK_SRC_HSE = 0x1,
232 RCC_SYSTEMCLOCK_SRC_PLL = 0x2,
240 RCC_MCO1_SRC_HSI = 0x0,
241 RCC_MCO1_SRC_LSE = 0x1,
242 RCC_MCO1_SRC_HSE = 0x2,
243 RCC_MCO1_SRC_PLL = 0x3,
250 RCC_MCO2_SRC_SYS = 0x0,
251 RCC_MCO2_SRC_I2S = 0x1,
252 RCC_MCO2_SRC_HSE = 0x2,
253 RCC_MCO2_SRC_PLL = 0x3,
260 RCC_MCO_PRESCALER_DIV1 = 0x0,
261 RCC_MCO_PRESCALER_DIV2 = 0x4,
262 RCC_MCO_PRESCALER_DIV3 = 0x5,
263 RCC_MCO_PRESCALER_DIV4 = 0x6,
264 RCC_MCO_PRESCALER_DIV5 = 0x7,
267typedef enum rcc_rtc_src {
268 RCC_RTC_SRC_NON = 0x0,
269 RCC_RTC_SRC_LSE = 0x1,
270 RCC_RTC_SRC_LSI = 0x2,
271 RCC_RTC_SRC_HSE = 0x3
Defines used commonly in most files.
void rcc_configure_ahb_prescaler(const rcc_ahb_prescaler_t value)
Set AHB prescaler to the desired value.
Definition rcc.c:15
rcc_pll_target
Available PLL targets.
Definition rcc.h:220
enum rcc_mco_prescaler rcc_mco_prescaler_t
Available MCO prescaler dividers.
void rcc_enable_peripheral_clk(const rcc_clk_periph_t peripheral)
Enables the specified peripheral clock.
Definition rcc.c:182
rcc_mco1_src
Available MCO1 clock sources.
Definition rcc.h:239
void rcc_disable_rtc(void)
Disables the RTC.
Definition rcc.c:323
void rcc_enable_lp_peripheral_clk(const rcc_clk_periph_t peripheral)
Enables the peripheral in low power mode.
Definition rcc.c:220
enum rcc_osc rcc_osc_t
Available RCC oscillators.
enum rcc_apb_prescaler rcc_apb_prescaler_t
Available RCC APBx prescaler dividers.
void rcc_set_mco2_src(const rcc_mco2_src_t source)
Set MCO2 to the specified clock source.
Definition rcc.c:258
enum rcc_systemclock_src rcc_systemclock_src_t
Available RCC system clock sources.
rcc_clk_periph
Available AHB/APB peripheral clocks.
Definition rcc.h:98
@ RCC_CLK_LP_SRAM2
Definition rcc.h:114
@ RCC_CLK_LP_SRAM1
Definition rcc.h:113
@ RCC_CLK_BKPSRAM
Definition rcc.h:115
rcc_mco2_src
Available MCO2 clock sources.
Definition rcc.h:249
rcc_osc
Available RCC oscillators.
Definition rcc.h:85
enum rcc_mco1_src rcc_mco1_src_t
Available MCO1 clock sources.
rcc_apb_prescaler
Available RCC APBx prescaler dividers.
Definition rcc.h:194
enum rcc_mco2_src rcc_mco2_src_t
Available MCO2 clock sources.
rcc_systemclock_src
Available RCC system clock sources.
Definition rcc.h:229
@ RCC_SYSTEMCLOCK_SRC_PLR
Definition rcc.h:233
enum rcc_pll_target rcc_pll_target_t
Available PLL targets.
rcc_ahb_prescaler
Available RCC AHB prescaler dividers.
Definition rcc.h:205
void rcc_set_mco1_src(const rcc_mco1_src_t source)
Set MCO1 to the specified clock source.
Definition rcc.c:239
rcc_mco_prescaler
Available MCO prescaler dividers.
Definition rcc.h:259
void rcc_configure_rtc_prescaler(const uint8_t value)
Set RTC HSE prescaler to the desired value.
Definition rcc.c:329
void rcc_enable_rtc(const rcc_rtc_src_t source)
Enables the RTC with specified source.
Definition rcc.c:305
enum rcc_clk_periph rcc_clk_periph_t
Available AHB/APB peripheral clocks.
void rcc_configure_apb_prescaler(const uint8_t apb, const rcc_apb_prescaler_t value)
Set APBx prescaler to the desired value.
Definition rcc.c:40
void rcc_disable_osc(const rcc_osc_t osc)
Disable the specified oscillator.
Definition rcc.c:147
void rcc_set_systemclock_src(const rcc_systemclock_src_t source)
Sets the system clock to the specified source.
Definition rcc.c:162
void rcc_enable_osc(const rcc_osc_t osc)
Enable the specified oscillator.
Definition rcc.c:112
void rcc_configure_mco_prescaler(const uint8_t mco, const rcc_mco_prescaler_t value)
Set MCOx prescaler to the desired value.
Definition rcc.c:277
void rcc_configure_pll_clk(const struct RCCPLLConfig config, const rcc_pll_target_t target)
Sets the PLL clocks according to config.
Definition rcc.c:69
enum rcc_ahb_prescaler rcc_ahb_prescaler_t
Available RCC AHB prescaler dividers.
void rcc_disable_peripheral_clk(const rcc_clk_periph_t peripheral)
Disables the specified peripheral clock.
Definition rcc.c:201
CMSIS device header stubs.
Contains PLL configuration values.
Definition rcc.h:69
uint16_t PLLN
Definition rcc.h:74
uint8_t PLLP
Definition rcc.h:71
uint8_t PLLQ
Definition rcc.h:72
uint8_t PLLR
Definition rcc.h:73
uint8_t PLLM
Definition rcc.h:70
Contains RCC registers.
Definition rcc.h:24