@@ -174,43 +174,46 @@ WEAK void SystemClock_Config(void)
174174{
175175 RCC_OscInitTypeDef RCC_OscInitStruct = {};
176176 RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
177- RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
178177 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+ }
179186
180187 /* * Configure the main internal regulator output voltage
181188 */
182189 if (HAL_PWREx_ControlVoltageScaling (PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) {
183190 Error_Handler ();
184191 }
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
190194 */
191195 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;
193198 RCC_OscInitStruct.LSEState = RCC_LSE_ON;
194199 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
195200 RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
196201 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;
200202 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 ;
206208 RCC_OscInitStruct.PLL .PLLQ = 2 ;
207- RCC_OscInitStruct.PLL .PLLR = 1 ;
209+ RCC_OscInitStruct.PLL .PLLR = 2 ;
208210 RCC_OscInitStruct.PLL .PLLRGE = RCC_PLLVCIRANGE_1;
209211 RCC_OscInitStruct.PLL .PLLFRACN = 0 ;
210212 if (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK) {
211213 Error_Handler ();
212214 }
213- /* * Initializes the CPU, AHB and APB busses clocks
215+
216+ /* * Initializes the CPU, AHB and APB buses clocks
214217 */
215218 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
216219 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
@@ -224,28 +227,37 @@ WEAK void SystemClock_Config(void)
224227 if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) {
225228 Error_Handler ();
226229 }
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;
232230
233- if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit) != HAL_OK) {
234- Error_Handler ();
235- }
236231 /* * Enable the SYSCFG APB clock
237232 */
238233 __HAL_RCC_CRS_CLK_ENABLE ();
234+
239235 /* * Configures CRS
240236 */
241237 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 ;
243239 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 );
245241 RCC_CRSInitStruct.ErrorLimitValue = 34 ;
246242 RCC_CRSInitStruct.HSI48CalibrationValue = 32 ;
247243
248244 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+
249261}
250262
251263#ifdef __cplusplus
0 commit comments