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
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 }
Generated on Fri Jul 15 2022 15:05:09 by
1.7.2