Skip to content

Commit f522ea7

Browse files
committed
NUCLEO-F411RE USB clock frequency fix
HAL: NUCLEO_F411RE - Corrected USB clock frequency Modified the main PLL settings so that the USB clock will run at a proper 48MHz instead of 44.44MHz. Consequently, the core clock will now run at 96MHz instead of 100MHz.
1 parent 41824de commit f522ea7

File tree

1 file changed

+21
-21
lines changed
  • libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE

1 file changed

+21
-21
lines changed

libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE/system_stm32f4xx.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@
2727
* | 2- PLL_HSE_XTAL |
2828
* | (external 8 MHz xtal) |
2929
*-----------------------------------------------------------------------------
30-
* SYSCLK(MHz) | 100 | 100
30+
* SYSCLK(MHz) | 96 | 96
3131
*-----------------------------------------------------------------------------
32-
* AHBCLK (MHz) | 100 | 100
32+
* AHBCLK (MHz) | 96 | 96
3333
*-----------------------------------------------------------------------------
34-
* APB1CLK (MHz) | 50 | 50
34+
* APB1CLK (MHz) | 48 | 48
3535
*-----------------------------------------------------------------------------
36-
* APB2CLK (MHz) | 100 | 100
36+
* APB2CLK (MHz) | 96 | 96
3737
*-----------------------------------------------------------------------------
38-
* USB capable (48 MHz precise clock) | NO | NO
38+
* USB capable (48 MHz precise clock) | YES | YES
3939
*-----------------------------------------------------------------------------
4040
******************************************************************************
4141
* @attention
@@ -611,22 +611,22 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
611611
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
612612
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
613613
//RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 1 MHz (8 MHz / 8)
614-
//RCC_OscInitStruct.PLL.PLLN = 400; // VCO output clock = 400 MHz (1 MHz * 400)
614+
//RCC_OscInitStruct.PLL.PLLN = 384; // VCO output clock = 384 MHz (1 MHz * 384)
615615
RCC_OscInitStruct.PLL.PLLM = 4; // VCO input clock = 2 MHz (8 MHz / 4)
616-
RCC_OscInitStruct.PLL.PLLN = 200; // VCO output clock = 400 MHz (2 MHz * 200)
617-
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 100 MHz (400 MHz / 4)
618-
RCC_OscInitStruct.PLL.PLLQ = 9; // USB clock = 44.44 MHz (400 MHz / 9) --> Not good for USB
616+
RCC_OscInitStruct.PLL.PLLN = 192; // VCO output clock = 384 MHz (2 MHz * 192)
617+
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 96 MHz (384 MHz / 4)
618+
RCC_OscInitStruct.PLL.PLLQ = 8; // USB clock = 48 MHz (384 MHz / 8) --> Good for USB
619619
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
620620
{
621621
return 0; // FAIL
622622
}
623623

624624
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
625625
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
626-
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 100 MHz
627-
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 100 MHz
628-
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 50 MHz
629-
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 100 MHz
626+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 96 MHz
627+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 96 MHz
628+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 48 MHz
629+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 96 MHz
630630
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
631631
{
632632
return 0; // FAIL
@@ -665,22 +665,22 @@ uint8_t SetSysClock_PLL_HSI(void)
665665
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
666666
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
667667
//RCC_OscInitStruct.PLL.PLLM = 16; // VCO input clock = 1 MHz (16 MHz / 16)
668-
//RCC_OscInitStruct.PLL.PLLN = 400; // VCO output clock = 400 MHz (1 MHz * 400)
668+
//RCC_OscInitStruct.PLL.PLLN = 384; // VCO output clock = 384 MHz (1 MHz * 384)
669669
RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 2 MHz (16 MHz / 8)
670-
RCC_OscInitStruct.PLL.PLLN = 200; // VCO output clock = 400 MHz (2 MHz * 200)
671-
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 100 MHz (400 MHz / 4)
672-
RCC_OscInitStruct.PLL.PLLQ = 9; // USB clock = 44.44 MHz (400 MHz / 9) --> Not good for USB
670+
RCC_OscInitStruct.PLL.PLLN = 192; // VCO output clock = 384 MHz (2 MHz * 192)
671+
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 96 MHz (384 MHz / 4)
672+
RCC_OscInitStruct.PLL.PLLQ = 8; // USB clock = 48 MHz (384 MHz / 8) --> Good for USB
673673
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
674674
{
675675
return 0; // FAIL
676676
}
677677

678678
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
679679
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
680-
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 100 MHz
681-
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 100 MHz
682-
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 50 MHz
683-
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 100 MHz
680+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 96 MHz
681+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 96 MHz
682+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 48 MHz
683+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 96 MHz
684684
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
685685
{
686686
return 0; // FAIL

0 commit comments

Comments
 (0)