Lib to switch the clock speed of the ST Nucleo to 84MHz. The internal RC oscillator is multiplied with the PLL.

Dependents:   Nucleo_spi_master_20MHz Nucleo_vs_Arduino_Speed_Test DMA_I2S_Test MPU9150AHRS ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ST_F401_84MHZ.cpp Source File

ST_F401_84MHZ.cpp

00001 // use the STM32CubeMX Tool to calculate the register settings 
00002 // www.st.com/stm32cube‎ 
00003 // 
00004 
00005 #include "stm32f4xx_hal.h"
00006 #include "ST_F401_84MHZ.h"
00007  
00008 F401_init84::F401_init84(unsigned int external){
00009     if(external == 1){
00010         SystemClock_Config_84MHz_external();
00011         }
00012     else {
00013         SystemClock_Config_84MHz_internal(); 
00014         }
00015     }
00016 
00017 void F401_init84::SystemClock_Config_84MHz_internal(void)
00018 {
00019   HAL_RCC_DeInit();  // we have to reset the clock settings !
00020   RCC_ClkInitTypeDef RCC_ClkInitStruct;
00021   RCC_OscInitTypeDef RCC_OscInitStruct;
00022 
00023   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;                // internal 16MHz RC 
00024   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
00025   RCC_OscInitStruct.HSICalibrationValue = 6;
00026   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;                              // PLL on
00027   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
00028   RCC_OscInitStruct.PLL.PLLM = 16;                                          // setup PLL divider
00029   RCC_OscInitStruct.PLL.PLLN = 336;
00030   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
00031   RCC_OscInitStruct.PLL.PLLQ = 4;
00032   HAL_RCC_OscConfig(&RCC_OscInitStruct);                                    
00033 
00034   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
00035   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
00036   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
00037   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
00038   SystemCoreClockUpdate();                                                  // update SystemCoreClock var
00039 }
00040 
00041 
00042 // use a external 8 MHz crystal to generate the CPU clock
00043 // You have to add X3 8MHz 
00044 // C33,C34 18pF 0603
00045 // R35,R37 0R 0603 or use wire
00046 
00047 
00048 void F401_init84::SystemClock_Config_84MHz_external(void)
00049 {
00050   HAL_RCC_DeInit();  // we have to reset the clock settings !
00051   RCC_ClkInitTypeDef RCC_ClkInitStruct;
00052   RCC_OscInitTypeDef RCC_OscInitStruct;
00053 
00054   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
00055   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
00056   RCC_OscInitStruct.LSIState = RCC_LSI_ON;
00057   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
00058   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
00059   RCC_OscInitStruct.PLL.PLLM = 8;
00060   RCC_OscInitStruct.PLL.PLLN = 336;
00061   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
00062   RCC_OscInitStruct.PLL.PLLQ = 4;
00063   HAL_RCC_OscConfig(&RCC_OscInitStruct);
00064 
00065   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
00066   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
00067   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
00068   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
00069   SystemCoreClockUpdate();                                                 // update SystemCoreClock var
00070 
00071 }