Skip to content

Commit b940809

Browse files
committed
variant(g4): enhance WeAct G474CE clock config for USB
* Enable CRS and switch USB to HSI48, decoupling it from PLL * Increase VCO multiplier to reach 170 MHz max spec
1 parent d4a0b3c commit b940809

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

Diff for: variants/STM32G4xx/G473C(B-C-E)U_G474C(B-C-E)U_G483CEU_G484CEU/variant_WEACT_G474CE.cpp

+16-2
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ WEAK void SystemClock_Config(void)
9898
RCC_OscInitTypeDef RCC_OscInitStruct = {};
9999
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
100100
#ifdef USBCON
101+
RCC_CRSInitTypeDef RCC_CRSInitStruct = {};
101102
RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
102103
#endif
103104

@@ -113,7 +114,7 @@ WEAK void SystemClock_Config(void)
113114
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
114115
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;
115116
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
116-
RCC_OscInitStruct.PLL.PLLN = 72;
117+
RCC_OscInitStruct.PLL.PLLN = 85;
117118
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
118119
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV6;
119120
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
@@ -133,9 +134,22 @@ WEAK void SystemClock_Config(void)
133134
}
134135

135136
#ifdef USBCON
137+
/* Enable the SYSCFG APB clock */
138+
__HAL_RCC_CRS_CLK_ENABLE();
139+
140+
/* Configures CRS */
141+
RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
142+
RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
143+
RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
144+
RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000, 1000);
145+
RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
146+
RCC_CRSInitStruct.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;
147+
148+
HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
149+
136150
/* Initializes the peripherals clocks */
137151
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
138-
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL;
152+
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
139153
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
140154
Error_Handler();
141155
}

0 commit comments

Comments
 (0)