16
16
17
17
/**
18
18
* This file configures the system clock as follows:
19
- *-----------------------------------------------------------------------------
20
- * System clock source | 1- PLL_HSE_EXTC | 3- PLL_HSI
21
- * | (external 8 MHz clock) | (internal 8 MHz)
22
- * | 2- PLL_HSE_XTAL |
23
- * | (external 8 MHz xtal) |
24
- *-----------------------------------------------------------------------------
25
- * SYSCLK(MHz) | 72 | 64
26
- *-----------------------------------------------------------------------------
27
- * AHBCLK (MHz) | 72 | 64
28
- *-----------------------------------------------------------------------------
29
- * APB1CLK (MHz) | 36 | 32
30
- *-----------------------------------------------------------------------------
31
- * APB2CLK (MHz) | 72 | 64
32
- *-----------------------------------------------------------------------------
33
- * USB capable (48 MHz precise clock) | NO | NO
34
- *-----------------------------------------------------------------------------
35
- ******************************************************************************
19
+ *-------------------------------------------------------------------------------------------
20
+ * System clock source | 1- PLL_HSE_EXTC / DEVICE_USBDEVICE | 3- PLL_HSI / DEVICE_USBDEVICE
21
+ * | (external 8 MHz clock) | (internal 8 MHz)
22
+ * | 2- PLL_HSE_XTAL / DEVICE_USBDEVICE |
23
+ * | (external 8 MHz xtal) |
24
+ *-------------------------------------------------------------------------------------------
25
+ * SYSCLK(MHz) | 72 / 72 | 64 / 48
26
+ *-------------------------------------------------------------------------------------------
27
+ * AHBCLK (MHz) | 72 / 72 | 64 / 48
28
+ *-------------------------------------------------------------------------------------------
29
+ * APB1CLK (MHz) | 36 / 36 | 32 / 24
30
+ *-------------------------------------------------------------------------------------------
31
+ * APB2CLK (MHz) | 72 / 72 | 64 / 48
32
+ *-------------------------------------------------------------------------------------------
36
33
*/
37
34
38
35
#include "stm32f1xx.h"
@@ -95,6 +92,14 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
95
92
{
96
93
RCC_ClkInitTypeDef RCC_ClkInitStruct ;
97
94
RCC_OscInitTypeDef RCC_OscInitStruct ;
95
+ #if (DEVICE_USBDEVICE )
96
+ RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInit ;
97
+ #endif /* DEVICE_USBDEVICE */
98
+
99
+ // Select HSI as system clock source to allow modification of the PLL configuration
100
+ RCC_ClkInitStruct .ClockType = RCC_CLOCKTYPE_SYSCLK ;
101
+ RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_HSI ;
102
+ HAL_RCC_ClockConfig (& RCC_ClkInitStruct , FLASH_LATENCY_0 );
98
103
99
104
/* Enable HSE oscillator and activate PLL with HSE as source */
100
105
RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSE ;
@@ -121,6 +126,13 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
121
126
return 0 ; // FAIL
122
127
}
123
128
129
+ #if (DEVICE_USBDEVICE )
130
+ /* USB clock selection */
131
+ RCC_PeriphCLKInit .PeriphClockSelection = RCC_PERIPHCLK_USB ;
132
+ RCC_PeriphCLKInit .UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5 ;
133
+ HAL_RCCEx_PeriphCLKConfig (& RCC_PeriphCLKInit );
134
+ #endif /* DEVICE_USBDEVICE */
135
+
124
136
/* Output clock on MCO1 pin(PA8) for debugging purpose */
125
137
//HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz
126
138
@@ -136,6 +148,9 @@ uint8_t SetSysClock_PLL_HSI(void)
136
148
{
137
149
RCC_ClkInitTypeDef RCC_ClkInitStruct ;
138
150
RCC_OscInitTypeDef RCC_OscInitStruct ;
151
+ #if (DEVICE_USBDEVICE )
152
+ RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInit ;
153
+ #endif /* DEVICE_USBDEVICE */
139
154
140
155
/* Enable HSI oscillator and activate PLL with HSI as source */
141
156
RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE ;
@@ -144,11 +159,22 @@ uint8_t SetSysClock_PLL_HSI(void)
144
159
RCC_OscInitStruct .HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT ;
145
160
RCC_OscInitStruct .PLL .PLLState = RCC_PLL_ON ;
146
161
RCC_OscInitStruct .PLL .PLLSource = RCC_PLLSOURCE_HSI_DIV2 ;
162
+ #if (DEVICE_USBDEVICE )
163
+ RCC_OscInitStruct .PLL .PLLMUL = RCC_PLL_MUL12 ; // 48 MHz (8 MHz/2 * 12)
164
+ #else /* DEVICE_USBDEVICE */
147
165
RCC_OscInitStruct .PLL .PLLMUL = RCC_PLL_MUL16 ; // 64 MHz (8 MHz/2 * 16)
166
+ #endif /* DEVICE_USBDEVICE */
148
167
if (HAL_RCC_OscConfig (& RCC_OscInitStruct ) != HAL_OK ) {
149
168
return 0 ; // FAIL
150
169
}
151
170
171
+ #if (DEVICE_USBDEVICE )
172
+ /* USB clock selection */
173
+ RCC_PeriphCLKInit .PeriphClockSelection = RCC_PERIPHCLK_USB ;
174
+ RCC_PeriphCLKInit .UsbClockSelection = RCC_USBCLKSOURCE_PLL ;
175
+ HAL_RCCEx_PeriphCLKConfig (& RCC_PeriphCLKInit );
176
+ #endif /* DEVICE_USBDEVICE */
177
+
152
178
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
153
179
RCC_ClkInitStruct .ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 );
154
180
RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ; // 64 MHz
0 commit comments