Skip to content

Commit ba12ed1

Browse files
committed
Adjust clock setting
Now the external clock/crystal doesn't have to be 8 MHz as long as HSE_VALUE is defined at compile time. Clock frequency is also adjusted from 84 to 100 MHz
1 parent 1f561c1 commit ba12ed1

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

variants/Generic_F410Rx/variant.cpp

+19-19
Original file line numberDiff line numberDiff line change
@@ -135,37 +135,37 @@ static uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
135135
// Enable HSE oscillator and activate PLL with HSE as source
136136
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
137137
if (bypass == 0) {
138-
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // External 8 MHz xtal on OSC_IN/OSC_OUT
138+
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // External crystal on OSC_IN/OSC_OUT
139139
} else {
140-
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; // External 8 MHz clock on OSC_IN
140+
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; // External clock on OSC_IN
141141
}
142142

143143
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
144144
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
145-
RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 1 MHz (8 MHz / 8)
146-
RCC_OscInitStruct.PLL.PLLN = 336; // VCO output clock = 336 MHz (1 MHz * 336)
147-
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 84 MHz (336 MHz / 4)
148-
RCC_OscInitStruct.PLL.PLLQ = 7; // USB clock = 48 MHz (336 MHz / 7) --> OK for USB
145+
RCC_OscInitStruct.PLL.PLLM = HSE_VALUE / 1000000L; // Expects an 8 MHz external clock by default. Redefine HSE_VALUE if not
146+
RCC_OscInitStruct.PLL.PLLN = 200; // VCO output clock = 200 MHz (1 MHz * 200)
147+
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLCLK = 100 MHz (200 MHz / 2)
148+
RCC_OscInitStruct.PLL.PLLQ = 4;
149149
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
150150
return 0; // FAIL
151151
}
152152

153153
// Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers
154154
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
155-
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 84 MHz
156-
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 84 MHz
157-
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 42 MHz
158-
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 84 MHz
155+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 100 MHz
156+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 100 MHz
157+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 50 MHz
158+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 100 MHz
159159
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
160160
return 0; // FAIL
161161
}
162162

163163
/* Output clock on MCO1 pin(PA8) for debugging purpose */
164164
/*
165165
if (bypass == 0)
166-
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz
166+
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // HSE_VALUE/1
167167
else
168-
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz
168+
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // HSE_VALUE/2
169169
*/
170170

171171
return 1; // OK
@@ -193,19 +193,19 @@ uint8_t SetSysClock_PLL_HSI(void)
193193
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
194194
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
195195
RCC_OscInitStruct.PLL.PLLM = 16; // VCO input clock = 1 MHz (16 MHz / 16)
196-
RCC_OscInitStruct.PLL.PLLN = 336; // VCO output clock = 336 MHz (1 MHz * 336)
197-
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 84 MHz (336 MHz / 4)
198-
RCC_OscInitStruct.PLL.PLLQ = 7; // USB clock = 48 MHz (336 MHz / 7) --> freq is ok but not precise enough
196+
RCC_OscInitStruct.PLL.PLLN = 200; // VCO output clock = 200 MHz (1 MHz * 200)
197+
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLCLK = 100 MHz (200 MHz / 2)
198+
RCC_OscInitStruct.PLL.PLLQ = 4;
199199
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
200200
return 0; // FAIL
201201
}
202202

203203
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
204204
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
205-
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 84 MHz
206-
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 84 MHz
207-
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 42 MHz
208-
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 84 MHz
205+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 100 MHz
206+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 100 MHz
207+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 50 MHz
208+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 100 MHz
209209
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
210210
return 0; // FAIL
211211
}

0 commit comments

Comments
 (0)