20
20
* | 2- USE_PLL_HSE_XTAL (external 8 MHz xtal)
21
21
* | 3- USE_PLL_HSI (internal 16 MHz)
22
22
*-----------------------------------------------------------------
23
- * SYSCLK(MHz) | 64
24
- * AHBCLK (MHz) | 64
25
- * APB1CLK (MHz) | 64
23
+ * SYSCLK(MHz) | 160 (default configuration) / 170 (CAN disabled)
26
24
* USB capable | NO
27
25
*-----------------------------------------------------------------
28
26
*/
29
27
30
28
#include "stm32g4xx.h"
31
29
#include "mbed_error.h"
32
30
33
- /*!< Uncomment the following line if you need to relocate your vector Table in
34
- Internal SRAM. */
35
- /* #define VECT_TAB_SRAM */
36
- #define VECT_TAB_OFFSET 0x00U /*!< Vector Table base offset field.
37
- This value must be a multiple of 0x100. */
38
-
39
31
#define USE_PLL_HSE_EXTC 0x8 // Use external clock (ST Link MCO)
40
32
#define USE_PLL_HSE_XTAL 0x4 // Use external xtal (X3 on board)
41
33
#define USE_PLL_HSI 0x2 // Use HSI internal clock
@@ -90,16 +82,19 @@ void SetSysClock(void)
90
82
/******************************************************************************/
91
83
/* PLL (clocked by HSE) used as System clock source */
92
84
/******************************************************************************/
93
- uint8_t SetSysClock_PLL_HSE (uint8_t bypass )
85
+ MBED_WEAK uint8_t SetSysClock_PLL_HSE (uint8_t bypass )
94
86
{
95
87
RCC_OscInitTypeDef RCC_OscInitStruct = {0 };
96
88
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0 };
97
89
98
- /** Configure the main internal regulator output voltage
99
- */
90
+ #if HSE_VALUE != 24000000
91
+ #error Unsupported externall clock value, check HSE_VALUE define
92
+ #endif
93
+
94
+ /* Configure the main internal regulator output voltage */
95
+ __HAL_RCC_PWR_CLK_ENABLE ();
100
96
HAL_PWREx_ControlVoltageScaling (PWR_REGULATOR_VOLTAGE_SCALE1_BOOST );
101
- /** Initializes the CPU, AHB and APB busses clocks
102
- */
97
+
103
98
RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSE ;
104
99
RCC_OscInitStruct .HSEState = RCC_HSE_ON ;
105
100
RCC_OscInitStruct .PLL .PLLState = RCC_PLL_ON ;
@@ -116,18 +111,20 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
116
111
RCC_OscInitStruct .PLL .PLLP = RCC_PLLP_DIV2 ;
117
112
RCC_OscInitStruct .PLL .PLLQ = RCC_PLLQ_DIV2 ;
118
113
RCC_OscInitStruct .PLL .PLLR = RCC_PLLR_DIV2 ;
114
+ #if defined(DEVICE_TRNG )
115
+ RCC_OscInitStruct .OscillatorType |= RCC_OSCILLATORTYPE_HSI48 ;
116
+ RCC_OscInitStruct .HSI48State = RCC_HSI48_ON ;
117
+ #endif
119
118
if (HAL_RCC_OscConfig (& RCC_OscInitStruct ) != HAL_OK ) {
120
119
return 0 ; // FAIL
121
120
}
122
- /** Initializes the CPU, AHB and APB busses clocks
123
- */
121
+
124
122
RCC_ClkInitStruct .ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
125
123
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 ;
126
124
RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ;
127
125
RCC_ClkInitStruct .AHBCLKDivider = RCC_SYSCLK_DIV1 ;
128
126
RCC_ClkInitStruct .APB1CLKDivider = RCC_HCLK_DIV1 ;
129
127
RCC_ClkInitStruct .APB2CLKDivider = RCC_HCLK_DIV1 ;
130
-
131
128
if (HAL_RCC_ClockConfig (& RCC_ClkInitStruct , FLASH_LATENCY_8 ) != HAL_OK ) {
132
129
return 0 ; // FAIL
133
130
}
@@ -145,33 +142,41 @@ uint8_t SetSysClock_PLL_HSI(void)
145
142
RCC_OscInitTypeDef RCC_OscInitStruct = {0 };
146
143
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0 };
147
144
148
- /** Configure the main internal regulator output voltage
149
- */
150
- HAL_PWREx_ControlVoltageScaling (PWR_REGULATOR_VOLTAGE_SCALE1 );
151
- /** Initializes the CPU, AHB and APB busses clocks
152
- */
145
+ /* Configure the main internal regulator output voltage */
146
+ __HAL_RCC_PWR_CLK_ENABLE ();
147
+ HAL_PWREx_ControlVoltageScaling (PWR_REGULATOR_VOLTAGE_SCALE1_BOOST );
148
+
153
149
RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSI ;
154
150
RCC_OscInitStruct .HSIState = RCC_HSI_ON ;
155
151
RCC_OscInitStruct .HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT ;
156
152
RCC_OscInitStruct .PLL .PLLState = RCC_PLL_ON ;
157
153
RCC_OscInitStruct .PLL .PLLSource = RCC_PLLSOURCE_HSI ;
158
154
RCC_OscInitStruct .PLL .PLLM = RCC_PLLM_DIV4 ;
155
+ //! 170MHz as a core frequency for FDCAN is not suitable for many frequencies,
156
+ //! as it provides low accuracy. When no FDCAN is used, the full capacity of 170 MHz
157
+ //! should be standard.
158
+ #if DEVICE_CAN
159
+ RCC_OscInitStruct .PLL .PLLN = 80 ;
160
+ #else
159
161
RCC_OscInitStruct .PLL .PLLN = 85 ;
162
+ #endif
160
163
RCC_OscInitStruct .PLL .PLLP = RCC_PLLP_DIV2 ;
161
164
RCC_OscInitStruct .PLL .PLLQ = RCC_PLLQ_DIV2 ;
162
165
RCC_OscInitStruct .PLL .PLLR = RCC_PLLR_DIV2 ;
166
+ #if defined(DEVICE_TRNG )
167
+ RCC_OscInitStruct .OscillatorType |= RCC_OSCILLATORTYPE_HSI48 ;
168
+ RCC_OscInitStruct .HSI48State = RCC_HSI48_ON ;
169
+ #endif
163
170
if (HAL_RCC_OscConfig (& RCC_OscInitStruct ) != HAL_OK ) {
164
171
return 0 ; // FAIL
165
172
}
166
- /** Initializes the CPU, AHB and APB busses clocks
167
- */
173
+
168
174
RCC_ClkInitStruct .ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
169
175
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 ;
170
176
RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ;
171
177
RCC_ClkInitStruct .AHBCLKDivider = RCC_SYSCLK_DIV1 ;
172
178
RCC_ClkInitStruct .APB1CLKDivider = RCC_HCLK_DIV1 ;
173
179
RCC_ClkInitStruct .APB2CLKDivider = RCC_HCLK_DIV1 ;
174
-
175
180
if (HAL_RCC_ClockConfig (& RCC_ClkInitStruct , FLASH_LATENCY_8 ) != HAL_OK ) {
176
181
return 0 ; // FAIL
177
182
}
0 commit comments