@@ -174,43 +174,46 @@ WEAK void SystemClock_Config(void)
174
174
{
175
175
RCC_OscInitTypeDef RCC_OscInitStruct = {};
176
176
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
177
- RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
178
177
RCC_CRSInitTypeDef RCC_CRSInitStruct = {};
178
+ RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
179
+
180
+ /*
181
+ * Switch to SMPS regulator instead of LDO
182
+ */
183
+ if (HAL_PWREx_ConfigSupply (PWR_SMPS_SUPPLY) != HAL_OK) {
184
+ Error_Handler ();
185
+ }
179
186
180
187
/* * Configure the main internal regulator output voltage
181
188
*/
182
189
if (HAL_PWREx_ControlVoltageScaling (PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) {
183
190
Error_Handler ();
184
191
}
185
- /* * Configure LSE Drive Capability
186
- */
187
- HAL_PWR_EnableBkUpAccess ();
188
- __HAL_RCC_LSEDRIVE_CONFIG (RCC_LSEDRIVE_LOW);
189
- /* * Initializes the CPU, AHB and APB busses clocks
192
+
193
+ /* * Initializes the CPU, AHB and APB buses clocks
190
194
*/
191
195
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_HSI
192
- | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_MSI;
196
+ | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_HSE;
197
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
193
198
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
194
199
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
195
200
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
196
201
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
197
- RCC_OscInitStruct.MSIState = RCC_MSI_ON;
198
- RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
199
- RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_0;
200
202
RCC_OscInitStruct.PLL .PLLState = RCC_PLL_ON;
201
- RCC_OscInitStruct.PLL .PLLSource = RCC_PLLSOURCE_MSI ;
202
- RCC_OscInitStruct.PLL .PLLMBOOST = RCC_PLLMBOOST_DIV4 ;
203
- RCC_OscInitStruct.PLL .PLLM = 3 ;
204
- RCC_OscInitStruct.PLL .PLLN = 10 ;
205
- RCC_OscInitStruct.PLL .PLLP = 2 ;
203
+ RCC_OscInitStruct.PLL .PLLSource = RCC_PLLSOURCE_HSE ;
204
+ RCC_OscInitStruct.PLL .PLLMBOOST = RCC_PLLMBOOST_DIV1 ;
205
+ RCC_OscInitStruct.PLL .PLLM = 1 ;
206
+ RCC_OscInitStruct.PLL .PLLN = 20 ;
207
+ RCC_OscInitStruct.PLL .PLLP = 8 ;
206
208
RCC_OscInitStruct.PLL .PLLQ = 2 ;
207
- RCC_OscInitStruct.PLL .PLLR = 1 ;
209
+ RCC_OscInitStruct.PLL .PLLR = 2 ;
208
210
RCC_OscInitStruct.PLL .PLLRGE = RCC_PLLVCIRANGE_1;
209
211
RCC_OscInitStruct.PLL .PLLFRACN = 0 ;
210
212
if (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK) {
211
213
Error_Handler ();
212
214
}
213
- /* * Initializes the CPU, AHB and APB busses clocks
215
+
216
+ /* * Initializes the CPU, AHB and APB buses clocks
214
217
*/
215
218
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
216
219
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
@@ -224,28 +227,37 @@ WEAK void SystemClock_Config(void)
224
227
if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) {
225
228
Error_Handler ();
226
229
}
227
- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_DAC1
228
- | RCC_PERIPHCLK_CLK48;
229
- PeriphClkInit.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_HSI;
230
- PeriphClkInit.Dac1ClockSelection = RCC_DAC1CLKSOURCE_LSE;
231
- PeriphClkInit.IclkClockSelection = RCC_CLK48CLKSOURCE_HSI48;
232
230
233
- if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit) != HAL_OK) {
234
- Error_Handler ();
235
- }
236
231
/* * Enable the SYSCFG APB clock
237
232
*/
238
233
__HAL_RCC_CRS_CLK_ENABLE ();
234
+
239
235
/* * Configures CRS
240
236
*/
241
237
RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
242
- RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB ;
238
+ RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_LSE ;
243
239
RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
244
- RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE (48000000 , 1000 );
240
+ RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE (48000000 , 32768 );
245
241
RCC_CRSInitStruct.ErrorLimitValue = 34 ;
246
242
RCC_CRSInitStruct.HSI48CalibrationValue = 32 ;
247
243
248
244
HAL_RCCEx_CRSConfig (&RCC_CRSInitStruct);
245
+ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_ADCDAC
246
+ | RCC_PERIPHCLK_DAC1 | RCC_PERIPHCLK_LPUART1
247
+ | RCC_PERIPHCLK_SDMMC | RCC_PERIPHCLK_CLK48
248
+ | RCC_PERIPHCLK_USBPHY;
249
+ PeriphClkInit.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_SYSCLK;
250
+ PeriphClkInit.Dac1ClockSelection = RCC_DAC1CLKSOURCE_LSE;
251
+ PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI;
252
+ PeriphClkInit.IclkClockSelection = RCC_CLK48CLKSOURCE_HSI48;
253
+ PeriphClkInit.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_CLK48;
254
+ PeriphClkInit.UsbPhyClockSelection = RCC_USBPHYCLKSOURCE_HSE;
255
+
256
+ if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit) != HAL_OK) {
257
+ Error_Handler ();
258
+ }
259
+
260
+
249
261
}
250
262
251
263
#ifdef __cplusplus
0 commit comments