PER Firmware
Loading...
Searching...
No Matches
rcc.h
Go to the documentation of this file.
1
11#ifndef __PHAL_G4_RCC_H__
12#define __PHAL_G4_RCC_H__
13
14#include "common/phal_G4/phal_G4.h"
15
16#define HSE_CLOCK_RATE_HZ (16'000'000)
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 (16'000'000)
24#define MCO_OUT_PIN (8)
25
26// RCC Constants
27#if defined(STM32G474xx)
28
29// TODO: update these based on voltage scaling, current max/min VCO rates are for range 1 voltage scaling
30#define RCC_MAX_VCO_RATE_HZ ((uint32_t)344e6)
31#define RCC_MIN_VCO_RATE_HZ ((uint32_t)64e6)
32
33// RM0440 section 7.2.4 PLL defines PLL input divisor (PLLM)
34#define RCC_MIN_PLL_INPUT_DIVISOR (1U)
35#define RCC_MAX_PLL_INPUT_DIVISOR (16U)
36#define RCC_MIN_PLL_OUTPUT_MULTIPLIER (8U)
37#define RCC_MAX_PLL_OUTPUT_MULTIPLIER (127U)
38#define RCC_MAX_SYSCLK_TARGET_HZ (170'000'000)
39
40#else
41#error "Please define a MCU arch"
42#endif
43
44typedef enum {
45 PLL_SRC_HSI16,
46 PLL_SRC_HSE
47} PLLSrc_t;
48
49typedef enum {
50 MCO1_SRC_HSI = 0,
51 MCO1_SRC_LSE = 1,
52 MCO1_SRC_HSE = 2,
53 MCO1_SRC_PLL = 3,
54
55} MCO1Source_t;
56
57typedef enum {
58 MCO_DIV_NONE = 0,
59 MCO_DIV_2 = 4,
60 MCO_DIV_3 = 5,
61 MCO_DIV_4 = 6,
62 MCO_DIV_5 = 7
63
64} MCODivisor_t;
65
66typedef enum {
67 CLOCK_SOURCE_HSI = 0,
68 CLOCK_SOURCE_HSE = 1,
69} ClockSrc_t;
70
71typedef enum {
72 RCC_ERROR_AHB_INIT = 0,
73 RCC_ERROR_APB1_INIT = 1,
74 RCC_ERROR_APB2_INIT = 2,
75 RCC_ERROR_HSI_INIT = 3,
76 RCC_ERROR_PLLSYS_INIT = 4,
77 RCC_ERROR_PLLVCO_INIT = 5,
78 RCC_ERROR_HSE_INIT = 6,
79} RCCErrors_t;
80
81typedef struct {
82 ClockSrc_t clock_source; /* Use HSE or not */
83 bool use_pll; /* Use PLL or not */
84 uint32_t system_clock_target_hz; /* System Core Clock rate */
85 uint32_t ahb_clock_target_hz; /* AHB clock rate target */
86 uint32_t apb1_clock_target_hz; /* APB1 clock rate target */
87 uint32_t apb2_clock_target_hz; /* APB2 clock rate target */
88
89 /* Only used for use_pll == true */
90 PLLSrc_t pll_src; /* Input source for PLL VCO */
91 uint32_t vco_output_rate_target_hz; /* VCO output target rate */
92 uint32_t msi_output_rate_target_hz; /* Use if pll_src == MSI */
94
103
114bool PHAL_configurePLLVCO(PLLSrc_t pll_source, uint32_t vco_output_rate_target_hz);
115
124bool PHAL_configurePLLSystemClock(uint32_t system_clock_target_hz);
125
134
143
151bool PHAL_configureAHBClock(uint32_t ahb_clock_target_hz);
152
160bool PHAL_configureAPB1Clock(uint32_t apb1_clock_target_hz);
161
169bool PHAL_configureAPB2Clock(uint32_t apb2_clock_target_hz);
170
171#endif // __PHAL_G4_RCC_H__
bool PHAL_configureAPB1Clock(uint32_t apb1_clock_target_hz)
Configure APB1 Clock rate by modifying the APB1 prescaler value.
Definition rcc.c:318
bool PHAL_configureAHBClock(uint32_t ahb_clock_target_hz)
Configure AHB Clock rate by modifying the AHB prescaler value.
Definition rcc.c:267
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:215
uint8_t PHAL_configureClockRates(ClockRateConfig_t *config)
Configure all AHB/APB/System clocks from the provided configuration.
Definition rcc.c:20
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:237
bool PHAL_configureAPB2Clock(uint32_t apb2_clock_target_hz)
Configure APB1 Clock rate by modifying the APB2 prescaler value.
Definition rcc.c:356
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
Definition rcc.h:88