Skip to content

Commit ebbe002

Browse files
authored
Fix clock. (#4)
* fix h573ri clock config. * improve h503kb config. * fix generic clock * wip * fix mul
1 parent 6e60087 commit ebbe002

File tree

4 files changed

+137
-39
lines changed

4 files changed

+137
-39
lines changed

variants/STM32H5xx/H503KBU/generic_clock.c

+30-5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ WEAK void SystemClock_Config(void)
2222
{
2323
RCC_OscInitTypeDef RCC_OscInitStruct = {};
2424
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
25+
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
2526

2627
/** Configure the main internal regulator output voltage
2728
*/
@@ -32,20 +33,21 @@ WEAK void SystemClock_Config(void)
3233
/** Initializes the RCC Oscillators according to the specified parameters
3334
* in the RCC_OscInitTypeDef structure.
3435
*/
35-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_CSI;
36-
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
36+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_CSI;
37+
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
3738
RCC_OscInitStruct.CSIState = RCC_CSI_ON;
3839
RCC_OscInitStruct.CSICalibrationValue = RCC_CSICALIBRATION_DEFAULT;
3940
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
4041
RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_CSI;
41-
RCC_OscInitStruct.PLL.PLLM = 1;
42-
RCC_OscInitStruct.PLL.PLLN = 125;
42+
RCC_OscInitStruct.PLL.PLLM = 2;
43+
RCC_OscInitStruct.PLL.PLLN = 250;
4344
RCC_OscInitStruct.PLL.PLLP = 2;
4445
RCC_OscInitStruct.PLL.PLLQ = 2;
4546
RCC_OscInitStruct.PLL.PLLR = 2;
46-
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_2;
47+
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
4748
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
4849
RCC_OscInitStruct.PLL.PLLFRACN = 0;
50+
4951
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
5052
Error_Handler();
5153
}
@@ -64,6 +66,29 @@ WEAK void SystemClock_Config(void)
6466
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
6567
Error_Handler();
6668
}
69+
70+
/** Initializes the peripherals clock
71+
*/
72+
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_LPUART1
73+
| RCC_PERIPHCLK_USB;
74+
PeriphClkInitStruct.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_PLL2R;
75+
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK3;
76+
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL2Q;
77+
78+
PeriphClkInitStruct.PLL2.PLL2Source = RCC_PLL2_SOURCE_CSI;
79+
PeriphClkInitStruct.PLL2.PLL2M = 2;
80+
PeriphClkInitStruct.PLL2.PLL2N = 250;
81+
PeriphClkInitStruct.PLL2.PLL2P = 2;
82+
PeriphClkInitStruct.PLL2.PLL2Q = 10;
83+
PeriphClkInitStruct.PLL2.PLL2R = 4;
84+
PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2_VCIRANGE_1;
85+
PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2_VCORANGE_WIDE;
86+
PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
87+
PeriphClkInitStruct.PLL2.PLL2ClockOut = RCC_PLL2_DIVR;
88+
89+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
90+
Error_Handler();
91+
}
6792
}
6893

6994
#endif /* ARDUINO_GENERIC_* */

variants/STM32H5xx/H503RBT/generic_clock.c

+34-14
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,36 @@ WEAK void SystemClock_Config(void)
2424
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
2525
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
2626

27-
/* Configure the main internal regulator output voltage */
27+
/** Configure the main internal regulator output voltage
28+
*/
2829
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
2930

3031
while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
3132

32-
/* Initializes the RCC Oscillators according to the specified parameters
33-
* in the RCC_OscInitTypeDef structure.
34-
*/
35-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_CSI;
36-
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
33+
/** Initializes the RCC Oscillators according to the specified parameters
34+
* in the RCC_OscInitTypeDef structure.
35+
*/
36+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_CSI;
37+
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
3738
RCC_OscInitStruct.CSIState = RCC_CSI_ON;
3839
RCC_OscInitStruct.CSICalibrationValue = RCC_CSICALIBRATION_DEFAULT;
3940
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
4041
RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_CSI;
41-
RCC_OscInitStruct.PLL.PLLM = 1;
42-
RCC_OscInitStruct.PLL.PLLN = 125;
42+
RCC_OscInitStruct.PLL.PLLM = 2;
43+
RCC_OscInitStruct.PLL.PLLN = 250;
4344
RCC_OscInitStruct.PLL.PLLP = 2;
4445
RCC_OscInitStruct.PLL.PLLQ = 2;
4546
RCC_OscInitStruct.PLL.PLLR = 2;
46-
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_2;
47+
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
4748
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
4849
RCC_OscInitStruct.PLL.PLLFRACN = 0;
50+
4951
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
5052
Error_Handler();
5153
}
52-
/* Initializes the CPU, AHB and APB buses clocks */
54+
55+
/** Initializes the CPU, AHB and APB buses clocks
56+
*/
5357
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
5458
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
5559
| RCC_CLOCKTYPE_PCLK3;
@@ -58,14 +62,30 @@ WEAK void SystemClock_Config(void)
5862
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
5963
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
6064
RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
65+
6166
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
6267
Error_Handler();
6368
}
6469

65-
/* Initializes the peripherals clock */
66-
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_USB;
67-
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
68-
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_CSI;
70+
/** Initializes the peripherals clock
71+
*/
72+
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_LPUART1
73+
| RCC_PERIPHCLK_USB;
74+
PeriphClkInitStruct.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_PLL2R;
75+
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK3;
76+
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL2Q;
77+
78+
PeriphClkInitStruct.PLL2.PLL2Source = RCC_PLL2_SOURCE_CSI;
79+
PeriphClkInitStruct.PLL2.PLL2M = 2;
80+
PeriphClkInitStruct.PLL2.PLL2N = 250;
81+
PeriphClkInitStruct.PLL2.PLL2P = 2;
82+
PeriphClkInitStruct.PLL2.PLL2Q = 10;
83+
PeriphClkInitStruct.PLL2.PLL2R = 4;
84+
PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2_VCIRANGE_1;
85+
PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2_VCORANGE_WIDE;
86+
PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
87+
PeriphClkInitStruct.PLL2.PLL2ClockOut = RCC_PLL2_DIVR;
88+
6989
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
7090
Error_Handler();
7191
}

variants/STM32H5xx/H503RBT/variant_NUCLEO_H503RB.cpp

+29-15
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
*
1111
*******************************************************************************
1212
*/
13-
1413
#if defined(ARDUINO_NUCLEO_H503RB)
1514
#include "pins_arduino.h"
1615

@@ -109,18 +108,18 @@ WEAK void SystemClock_Config(void)
109108
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
110109
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
111110

112-
/* Configure the main internal regulator output voltage */
111+
/** Configure the main internal regulator output voltage
112+
*/
113113
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
114114

115115
while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
116116

117-
/* Initializes the RCC Oscillators according to the specified parameters in the RCC_OscInitTypeDef structure */
118-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_HSE
119-
| RCC_OSCILLATORTYPE_CSI;
120-
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
121-
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
122-
RCC_OscInitStruct.CSIState = RCC_CSI_ON;
123-
RCC_OscInitStruct.CSICalibrationValue = RCC_CSICALIBRATION_DEFAULT;
117+
/** Initializes the RCC Oscillators according to the specified parameters
118+
* in the RCC_OscInitTypeDef structure.
119+
*/
120+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_LSE;
121+
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
122+
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
124123
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
125124
RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_HSE;
126125
RCC_OscInitStruct.PLL.PLLM = 12;
@@ -136,7 +135,8 @@ WEAK void SystemClock_Config(void)
136135
Error_Handler();
137136
}
138137

139-
/* Initializes the CPU, AHB and APB buses clocks */
138+
/** Initializes the CPU, AHB and APB buses clocks
139+
*/
140140
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
141141
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
142142
| RCC_CLOCKTYPE_PCLK3;
@@ -150,10 +150,24 @@ WEAK void SystemClock_Config(void)
150150
Error_Handler();
151151
}
152152

153-
/* Initializes the peripherals clock */
154-
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_USB;
155-
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
156-
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_CSI;
153+
/** Initializes the peripherals clock
154+
*/
155+
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_LPUART1
156+
| RCC_PERIPHCLK_USB;
157+
PeriphClkInitStruct.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_PLL2R;
158+
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK3;
159+
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL2Q;
160+
161+
PeriphClkInitStruct.PLL2.PLL2Source = RCC_PLL2_SOURCE_HSE;
162+
PeriphClkInitStruct.PLL2.PLL2M = 12;
163+
PeriphClkInitStruct.PLL2.PLL2N = 250;
164+
PeriphClkInitStruct.PLL2.PLL2P = 2;
165+
PeriphClkInitStruct.PLL2.PLL2Q = 10;
166+
PeriphClkInitStruct.PLL2.PLL2R = 4;
167+
PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2_VCIRANGE_1;
168+
PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2_VCORANGE_WIDE;
169+
PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
170+
PeriphClkInitStruct.PLL2.PLL2ClockOut = RCC_PLL2_DIVR;
157171

158172
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
159173
Error_Handler();
@@ -164,4 +178,4 @@ WEAK void SystemClock_Config(void)
164178
}
165179
#endif
166180

167-
#endif /* ARDUINO_NUCLEO_H503RB */
181+
#endif /* ARDUINO_NUCLEO_H503RB */

variants/STM32H5xx/H563R(G-I)T_H573RIT/generic_clock.c

+44-5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ WEAK void SystemClock_Config(void)
2323
{
2424
RCC_OscInitTypeDef RCC_OscInitStruct = {};
2525
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
26+
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
2627

2728
/** Configure the main internal regulator output voltage
2829
*/
@@ -33,20 +34,21 @@ WEAK void SystemClock_Config(void)
3334
/** Initializes the RCC Oscillators according to the specified parameters
3435
* in the RCC_OscInitTypeDef structure.
3536
*/
36-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_CSI;
37-
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
37+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_CSI;
38+
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
3839
RCC_OscInitStruct.CSIState = RCC_CSI_ON;
3940
RCC_OscInitStruct.CSICalibrationValue = RCC_CSICALIBRATION_DEFAULT;
4041
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
4142
RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_CSI;
42-
RCC_OscInitStruct.PLL.PLLM = 1;
43-
RCC_OscInitStruct.PLL.PLLN = 125;
43+
RCC_OscInitStruct.PLL.PLLM = 2;
44+
RCC_OscInitStruct.PLL.PLLN = 250;
4445
RCC_OscInitStruct.PLL.PLLP = 2;
4546
RCC_OscInitStruct.PLL.PLLQ = 2;
4647
RCC_OscInitStruct.PLL.PLLR = 2;
47-
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_2;
48+
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_1;
4849
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
4950
RCC_OscInitStruct.PLL.PLLFRACN = 0;
51+
5052
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
5153
Error_Handler();
5254
}
@@ -65,6 +67,43 @@ WEAK void SystemClock_Config(void)
6567
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
6668
Error_Handler();
6769
}
70+
71+
/** Initializes the peripherals clock
72+
*/
73+
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_LPUART1
74+
| RCC_PERIPHCLK_OSPI | RCC_PERIPHCLK_SDMMC1
75+
| RCC_PERIPHCLK_USB;
76+
PeriphClkInitStruct.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_PLL2R;
77+
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK3;
78+
PeriphClkInitStruct.OspiClockSelection = RCC_OSPICLKSOURCE_HCLK;
79+
PeriphClkInitStruct.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_PLL1Q;
80+
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3Q;
81+
82+
PeriphClkInitStruct.PLL2.PLL2Source = RCC_PLL2_SOURCE_CSI;
83+
PeriphClkInitStruct.PLL2.PLL2M = 2;
84+
PeriphClkInitStruct.PLL2.PLL2N = 250;
85+
PeriphClkInitStruct.PLL2.PLL2P = 2;
86+
PeriphClkInitStruct.PLL2.PLL2Q = 2;
87+
PeriphClkInitStruct.PLL2.PLL2R = 4;
88+
PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2_VCIRANGE_1;
89+
PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2_VCORANGE_WIDE;
90+
PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
91+
PeriphClkInitStruct.PLL2.PLL2ClockOut = RCC_PLL2_DIVR;
92+
93+
PeriphClkInitStruct.PLL3.PLL3Source = RCC_PLL3_SOURCE_CSI;
94+
PeriphClkInitStruct.PLL3.PLL3M = 2;
95+
PeriphClkInitStruct.PLL3.PLL3N = 250;
96+
PeriphClkInitStruct.PLL3.PLL3P = 2;
97+
PeriphClkInitStruct.PLL3.PLL3Q = 10;
98+
PeriphClkInitStruct.PLL3.PLL3R = 2;
99+
PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3_VCIRANGE_3;
100+
PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3_VCORANGE_WIDE;
101+
PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
102+
PeriphClkInitStruct.PLL3.PLL3ClockOut = RCC_PLL3_DIVQ;
103+
104+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
105+
Error_Handler();
106+
}
68107
}
69108

70109
#endif /* ARDUINO_GENERIC_* */

0 commit comments

Comments
 (0)