PER Firmware
Loading...
Searching...
No Matches
rcc.h
Go to the documentation of this file.
1
11#ifndef _PHAL_RCC_H_
12#define _PHAL_RCC_H_
13
15
16#define HSE_CLOCK_RATE_HZ (16000000)
17
18#define HSE_CLOCK_RATE_HZ_INVALID (1) /* High Speed External oscilator value */
19#ifndef HSE_CLOCK_RATE_HZ
20#define HSE_CLOCK_RATE_HZ HSE_CLOCK_RATE_HZ_INVALID /* Define this in order to configure clocks to use the HSE clock */
21#endif // HSE_CLOCK_RATE_HZ
22
23#define HSI_CLOCK_RATE_HZ (16000000)
24#define MCO_OUT_PIN (8)
25
26// RCC Constants
27#if defined(STM32F407xx)
28
29#define RCC_MAX_VCO_RATE_HZ ((uint32_t)432e6)
30#define RCC_MIN_VCO_RATE_HZ ((uint32_t)100e6)
31#define RCC_MIN_PLL_INPUT_DIVISOR (2U)
32#define RCC_MAX_PLL_INPUT_DIVISOR (63U)
33#define RCC_MIN_PLL_OUTPUT_MULTIPLIER (50U)
34#define RCC_MAX_PLL_OUTPUT_MULTIPLIER (432U)
35#define RCC_MAX_SYSCLK_TARGET_HZ (168000000)
36
37#else
38#error "Please define a MCU arch"
39#endif
40
45
53
54typedef enum {
59 MCO_DIV_5 = 7
60
62
67
77
78typedef struct {
79 ClockSrc_t clock_source; /* Use HSE or not */
80 bool use_pll; /* Use PLL or not */
81 uint32_t system_clock_target_hz; /* System Core Clock rate */
82 uint32_t ahb_clock_target_hz; /* AHB clock rate target */
83 uint32_t apb1_clock_target_hz; /* APB1 clock rate target */
84 uint32_t apb2_clock_target_hz; /* APB2 clock rate target */
85
86 /* Only used for use_pll == true */
87 PLLSrc_t pll_src; /* Input source for PLL VCO */
88 uint32_t vco_output_rate_target_hz; /* VCO output target rate */
89 uint32_t msi_output_rate_target_hz; /* Use if pll_src == MSI */
91
100
111bool PHAL_configurePLLVCO(PLLSrc_t pll_source, uint32_t vco_output_rate_target_hz);
112
121bool PHAL_configurePLLSystemClock(uint32_t system_clock_target_hz);
122
131
140
148bool PHAL_configureAHBClock(uint32_t ahb_clock_target_hz);
149
157bool PHAL_configureAPB1Clock(uint32_t apb1_clock_target_hz);
158
166bool PHAL_configureAPB2Clock(uint32_t apb2_clock_target_hz);
167
174void PHAL_trimHSI(uint8_t trim_val);
175
193bool PHAL_enableMCO1(GPIO_TypeDef* bank, uint8_t pin, MCO1Source_t source, MCODivisor_t division);
194
195#endif // _PHAL_PLL_H_
static ethernet_config_t config
Definition ethernet.c:22
ClockSrc_t
Definition rcc.h:63
@ CLOCK_SOURCE_HSI
Definition rcc.h:64
@ CLOCK_SOURCE_HSE
Definition rcc.h:65
bool PHAL_configureAPB1Clock(uint32_t apb1_clock_target_hz)
Configure APB1 Clock rate by modifying the APB1 prescaler value.
Definition rcc.c:286
bool PHAL_configureAHBClock(uint32_t ahb_clock_target_hz)
Configure AHB Clock rate by modifying the AHB prescaler value.
Definition rcc.c:235
bool PHAL_configureHSISystemClock()
Configure HSI CLK as the System Clock. SHOULD BE DONE BEFORE ANY OF THE AHB OR APB CLOCKS ARE CHANGED...
Definition rcc.c:183
MCO1Source_t
Definition rcc.h:46
@ MCO1_SRC_LSE
Definition rcc.h:48
@ MCO1_SRC_HSI
Definition rcc.h:47
@ MCO1_SRC_HSE
Definition rcc.h:49
@ MCO1_SRC_PLL
Definition rcc.h:50
MCODivisor_t
Definition rcc.h:54
@ MCO_DIV_5
Definition rcc.h:59
@ MCO_DIV_4
Definition rcc.h:58
@ MCO_DIV_3
Definition rcc.h:57
@ MCO_DIV_NONE
Definition rcc.h:55
@ MCO_DIV_2
Definition rcc.h:56
uint8_t PHAL_configureClockRates(ClockRateConfig_t *config)
Configure all AHB/APB/System clocks from the provided configuration.
Definition rcc.c:20
bool PHAL_enableMCO1(GPIO_TypeDef *bank, uint8_t pin, MCO1Source_t source, MCODivisor_t division)
Enable the Clock Out Pin 1 It is highly recommended to change this only after reset before enabling t...
Definition rcc.c:370
RCCErrors_t
Definition rcc.h:68
@ RCC_ERROR_HSE_INIT
Definition rcc.h:75
@ RCC_ERROR_APB2_INIT
Definition rcc.h:71
@ RCC_ERROR_PLLVCO_INIT
Definition rcc.h:74
@ RCC_ERROR_HSI_INIT
Definition rcc.h:72
@ RCC_ERROR_AHB_INIT
Definition rcc.h:69
@ RCC_ERROR_APB1_INIT
Definition rcc.h:70
@ RCC_ERROR_PLLSYS_INIT
Definition rcc.h:73
bool PHAL_configurePLLSystemClock(uint32_t system_clock_target_hz)
Configure PLL CLK as the System Clock at the desired target frequency. SHOULD BE DONE BEFORE ANY OF T...
Definition rcc.c:121
bool PHAL_configureHSESystemClock()
Configure HSE CLK as the System Clock. SHOULD BE DONE BEFORE ANY OF THE AHB OR APB CLOCKS ARE CHANGED...
Definition rcc.c:205
bool PHAL_configureAPB2Clock(uint32_t apb2_clock_target_hz)
Configure APB1 Clock rate by modifying the APB2 prescaler value.
Definition rcc.c:324
PLLSrc_t
Definition rcc.h:41
@ PLL_SRC_HSI16
Definition rcc.h:42
@ PLL_SRC_HSE
Definition rcc.h:43
bool PHAL_configurePLLVCO(PLLSrc_t pll_source, uint32_t vco_output_rate_target_hz)
Configure PLL VCO Clock rate The VCO clock is the input clock for the different PLL outputs....
Definition rcc.c:52
void PHAL_trimHSI(uint8_t trim_val)
Trim the HSI clock 0 <= trim_val <= 31 17 = increase speed by ~0.2% 15 = decrease speed by ~0....
Definition rcc.c:361
Definition rcc.h:78
uint32_t apb1_clock_target_hz
Definition rcc.h:83
uint32_t vco_output_rate_target_hz
Definition rcc.h:88
uint32_t system_clock_target_hz
Definition rcc.h:81
uint32_t apb2_clock_target_hz
Definition rcc.h:84
PLLSrc_t pll_src
Definition rcc.h:87
uint32_t msi_output_rate_target_hz
Definition rcc.h:89
ClockSrc_t clock_source
Definition rcc.h:79
bool use_pll
Definition rcc.h:80
uint32_t ahb_clock_target_hz
Definition rcc.h:82