27
27
* | 2- PLL_HSE_XTAL |
28
28
* | (external 8 MHz xtal) |
29
29
*-----------------------------------------------------------------------------
30
- * SYSCLK(MHz) | 96 | 96
30
+ * SYSCLK(MHz) | 100 | 96
31
31
*-----------------------------------------------------------------------------
32
- * AHBCLK (MHz) | 96 | 96
32
+ * AHBCLK (MHz) | 100 | 96
33
33
*-----------------------------------------------------------------------------
34
- * APB1CLK (MHz) | 48 | 48
34
+ * APB1CLK (MHz) | 50 | 48
35
35
*-----------------------------------------------------------------------------
36
- * APB2CLK (MHz) | 96 | 96
36
+ * APB2CLK (MHz) | 100 | 96
37
37
*-----------------------------------------------------------------------------
38
38
* USB capable (48 MHz precise clock) | YES | YES
39
39
*-----------------------------------------------------------------------------
@@ -821,7 +821,7 @@ void SetSysClock(void)
821
821
}
822
822
823
823
/* Output clock on MCO2 pin(PC9) for debugging purpose */
824
- //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4); // 100 MHz / 4 = 25 MHz
824
+ //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4);
825
825
}
826
826
827
827
#if (USE_PLL_HSE_XTAL != 0 ) || (USE_PLL_HSE_EXTC != 0 )
@@ -832,12 +832,15 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
832
832
{
833
833
RCC_ClkInitTypeDef RCC_ClkInitStruct ;
834
834
RCC_OscInitTypeDef RCC_OscInitStruct ;
835
-
835
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct ;
836
+
837
+ /* Enable Power Control clock */
838
+ __HAL_RCC_PWR_CLK_ENABLE ();
839
+
836
840
/* The voltage scaling allows optimizing the power consumption when the device is
837
841
clocked below the maximum system frequency, to update the voltage scaling value
838
842
regarding system frequency refer to product datasheet. */
839
- __PWR_CLK_ENABLE ();
840
- __HAL_PWR_VOLTAGESCALING_CONFIG (PWR_REGULATOR_VOLTAGE_SCALE2 );
843
+ __HAL_PWR_VOLTAGESCALING_CONFIG (PWR_REGULATOR_VOLTAGE_SCALE1 );
841
844
842
845
/* Enable HSE oscillator and activate PLL with HSE as source */
843
846
RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSE ;
@@ -851,30 +854,40 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
851
854
}
852
855
RCC_OscInitStruct .PLL .PLLState = RCC_PLL_ON ;
853
856
RCC_OscInitStruct .PLL .PLLSource = RCC_PLLSOURCE_HSE ;
854
- //RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 1 MHz (8 MHz / 8)
855
- //RCC_OscInitStruct.PLL.PLLN = 384; // VCO output clock = 384 MHz (1 MHz * 384)
856
- RCC_OscInitStruct .PLL .PLLM = 4 ; // VCO input clock = 2 MHz (8 MHz / 4)
857
- RCC_OscInitStruct .PLL .PLLN = 192 ; // VCO output clock = 384 MHz (2 MHz * 192)
858
- RCC_OscInitStruct .PLL .PLLP = RCC_PLLP_DIV4 ; // PLLCLK = 96 MHz (384 MHz / 4)
859
- RCC_OscInitStruct .PLL .PLLQ = 8 ; // USB clock = 48 MHz (384 MHz / 8) --> Good for USB
857
+
858
+ RCC_OscInitStruct .PLL .PLLM = 8 ; // VCO input clock = 1 MHz (8 MHz / 8)
859
+ RCC_OscInitStruct .PLL .PLLN = 200 ; // VCO output clock = 200 MHz (1 MHz * 200)
860
+ RCC_OscInitStruct .PLL .PLLP = RCC_PLLP_DIV2 ; // PLLCLK = 100 MHz (200 MHz / 2)
861
+ RCC_OscInitStruct .PLL .PLLQ = 7 ;
862
+ RCC_OscInitStruct .PLL .PLLR = 2 ;
863
+
860
864
if (HAL_RCC_OscConfig (& RCC_OscInitStruct ) != HAL_OK )
861
865
{
862
866
return 0 ; // FAIL
863
867
}
864
868
869
+ /* Select PLLSAI output as USB clock source */
870
+ PeriphClkInitStruct .PLLI2S .PLLI2SM = 8 ;
871
+ PeriphClkInitStruct .PLLI2S .PLLI2SQ = 4 ;
872
+ PeriphClkInitStruct .PLLI2S .PLLI2SN = 192 ;
873
+ PeriphClkInitStruct .PeriphClockSelection = RCC_PERIPHCLK_CK48 ;
874
+ PeriphClkInitStruct .Clk48ClockSelection = RCC_CK48CLKSOURCE_PLLI2SQ ;
875
+
876
+ HAL_RCCEx_PeriphCLKConfig (& PeriphClkInitStruct );
877
+
865
878
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
866
879
RCC_ClkInitStruct .ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 );
867
- RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ; // 96 MHz
868
- RCC_ClkInitStruct .AHBCLKDivider = RCC_SYSCLK_DIV1 ; // 96 MHz
869
- RCC_ClkInitStruct .APB1CLKDivider = RCC_HCLK_DIV2 ; // 48 MHz
870
- RCC_ClkInitStruct .APB2CLKDivider = RCC_HCLK_DIV1 ; // 96 MHz
880
+ RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ;
881
+ RCC_ClkInitStruct .AHBCLKDivider = RCC_SYSCLK_DIV1 ;
882
+ RCC_ClkInitStruct .APB1CLKDivider = RCC_HCLK_DIV2 ;
883
+ RCC_ClkInitStruct .APB2CLKDivider = RCC_HCLK_DIV1 ;
884
+
871
885
if (HAL_RCC_ClockConfig (& RCC_ClkInitStruct , FLASH_LATENCY_3 ) != HAL_OK )
872
886
{
873
887
return 0 ; // FAIL
874
888
}
875
889
876
890
/* Output clock on MCO1 pin(PA8) for debugging purpose */
877
-
878
891
//if (bypass == 0)
879
892
// HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz with xtal
880
893
//else
@@ -891,37 +904,52 @@ uint8_t SetSysClock_PLL_HSI(void)
891
904
{
892
905
RCC_ClkInitTypeDef RCC_ClkInitStruct ;
893
906
RCC_OscInitTypeDef RCC_OscInitStruct ;
894
-
907
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct ;
908
+
909
+ /* Enable Power Control clock */
910
+ __HAL_RCC_PWR_CLK_ENABLE ();
911
+
895
912
/* The voltage scaling allows optimizing the power consumption when the device is
896
913
clocked below the maximum system frequency, to update the voltage scaling value
897
914
regarding system frequency refer to product datasheet. */
898
- __PWR_CLK_ENABLE ();
899
- __HAL_PWR_VOLTAGESCALING_CONFIG (PWR_REGULATOR_VOLTAGE_SCALE2 );
915
+ __HAL_PWR_VOLTAGESCALING_CONFIG (PWR_REGULATOR_VOLTAGE_SCALE1 );
900
916
901
917
/* Enable HSI oscillator and activate PLL with HSI as source */
902
918
RCC_OscInitStruct .OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE ;
903
919
RCC_OscInitStruct .HSIState = RCC_HSI_ON ;
904
920
RCC_OscInitStruct .HSEState = RCC_HSE_OFF ;
905
921
RCC_OscInitStruct .HSICalibrationValue = 16 ;
906
922
RCC_OscInitStruct .PLL .PLLState = RCC_PLL_ON ;
907
- RCC_OscInitStruct .PLL .PLLSource = RCC_PLLSOURCE_HSI ;
923
+ RCC_OscInitStruct .PLL .PLLSource = RCC_PLLSOURCE_HSI ;
924
+
908
925
//RCC_OscInitStruct.PLL.PLLM = 16; // VCO input clock = 1 MHz (16 MHz / 16)
909
926
//RCC_OscInitStruct.PLL.PLLN = 384; // VCO output clock = 384 MHz (1 MHz * 384)
910
927
RCC_OscInitStruct .PLL .PLLM = 8 ; // VCO input clock = 2 MHz (16 MHz / 8)
911
928
RCC_OscInitStruct .PLL .PLLN = 192 ; // VCO output clock = 384 MHz (2 MHz * 192)
912
929
RCC_OscInitStruct .PLL .PLLP = RCC_PLLP_DIV4 ; // PLLCLK = 96 MHz (384 MHz / 4)
913
- RCC_OscInitStruct .PLL .PLLQ = 8 ; // USB clock = 48 MHz (384 MHz / 8) --> Good for USB
930
+ RCC_OscInitStruct .PLL .PLLQ = 8 ;
931
+ RCC_OscInitStruct .PLL .PLLQ = 2 ;
932
+
914
933
if (HAL_RCC_OscConfig (& RCC_OscInitStruct ) != HAL_OK )
915
934
{
916
935
return 0 ; // FAIL
917
936
}
918
937
938
+ /* Select PLLSAI output as USB clock source */
939
+ PeriphClkInitStruct .PLLI2S .PLLI2SM = 8 ;
940
+ PeriphClkInitStruct .PLLI2S .PLLI2SQ = 4 ;
941
+ PeriphClkInitStruct .PLLI2S .PLLI2SN = 192 ;
942
+ PeriphClkInitStruct .PeriphClockSelection = RCC_PERIPHCLK_CK48 ;
943
+ PeriphClkInitStruct .Clk48ClockSelection = RCC_CK48CLKSOURCE_PLLI2SQ ;
944
+
945
+ HAL_RCCEx_PeriphCLKConfig (& PeriphClkInitStruct );
946
+
919
947
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
920
948
RCC_ClkInitStruct .ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 );
921
- RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ; // 96 MHz
922
- RCC_ClkInitStruct .AHBCLKDivider = RCC_SYSCLK_DIV1 ; // 96 MHz
923
- RCC_ClkInitStruct .APB1CLKDivider = RCC_HCLK_DIV2 ; // 48 MHz
924
- RCC_ClkInitStruct .APB2CLKDivider = RCC_HCLK_DIV1 ; // 96 MHz
949
+ RCC_ClkInitStruct .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK ;
950
+ RCC_ClkInitStruct .AHBCLKDivider = RCC_SYSCLK_DIV1 ;
951
+ RCC_ClkInitStruct .APB1CLKDivider = RCC_HCLK_DIV2 ;
952
+ RCC_ClkInitStruct .APB2CLKDivider = RCC_HCLK_DIV1 ;
925
953
if (HAL_RCC_ClockConfig (& RCC_ClkInitStruct , FLASH_LATENCY_3 ) != HAL_OK )
926
954
{
927
955
return 0 ; // FAIL
0 commit comments