Setup for higher clock frequency

Dependents:   ELEC350_Project2

Committer:
Swabey89
Date:
Wed Jan 02 19:45:55 2019 +0000
Revision:
0:61304557ddd1
Updated to use queues more

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Swabey89 0:61304557ddd1 1 #include <stm32f4xx.h>
Swabey89 0:61304557ddd1 2
Swabey89 0:61304557ddd1 3 void PLL_Config(void)
Swabey89 0:61304557ddd1 4 {
Swabey89 0:61304557ddd1 5
Swabey89 0:61304557ddd1 6
Swabey89 0:61304557ddd1 7 //*******************************************************************************
Swabey89 0:61304557ddd1 8 //* PLL (clocked by HSI) used as System clock source *
Swabey89 0:61304557ddd1 9 //* By Stuart MacVeigh *
Swabey89 0:61304557ddd1 10 //*******************************************************************************
Swabey89 0:61304557ddd1 11
Swabey89 0:61304557ddd1 12 RCC->APB1ENR |= RCC_APB1ENR_PWREN; //enable power interface clock source
Swabey89 0:61304557ddd1 13 PWR->CR |= PWR_CR_VOS;
Swabey89 0:61304557ddd1 14
Swabey89 0:61304557ddd1 15
Swabey89 0:61304557ddd1 16 #define PLL_N 180 //SYSTEM CLOCK SPEED (FCY (MHz))
Swabey89 0:61304557ddd1 17 #define HSI 16000000 //INTERAL OSC FREQUENCY
Swabey89 0:61304557ddd1 18
Swabey89 0:61304557ddd1 19 #define PLL_M (HSI/2000000) //Fcy = Fxtal x PLL_N/(PLL_P x PLL_M)
Swabey89 0:61304557ddd1 20 #define PLL_P 2
Swabey89 0:61304557ddd1 21 #define PLL_Q 7
Swabey89 0:61304557ddd1 22 // HCLK = SYSCLK / 1
Swabey89 0:61304557ddd1 23 RCC->CFGR |= RCC_CFGR_HPRE_DIV1; //CORE CLOCK = 180MHZ
Swabey89 0:61304557ddd1 24
Swabey89 0:61304557ddd1 25 // PCLK2 = HCLK / 2
Swabey89 0:61304557ddd1 26 RCC->CFGR |= RCC_CFGR_PPRE2_DIV4; //PERIPHERAL CLOCK 2 = 180MHZ/4 = 45MHZ, THIS IS BECAUSE THE SPI MODULES (AND POSSIBLY OTHERS) DO NOT OPERATE PROPERLY WHEN PCLK > 42MHZ
Swabey89 0:61304557ddd1 27
Swabey89 0:61304557ddd1 28 // PCLK1 = HCLK / 4
Swabey89 0:61304557ddd1 29 RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; //PERIPHERAL CLOCK 1 = 180MHZ/4 = 45MHZ, THIS IS BECAUSE THE SPI MODULES (AND POSSIBLY OTHERS) DO NOT OPERATE PROPERLY WHEN PCLK > 42MHZ
Swabey89 0:61304557ddd1 30
Swabey89 0:61304557ddd1 31 // Configure the main PLL
Swabey89 0:61304557ddd1 32 RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (PLL_Q << 24);
Swabey89 0:61304557ddd1 33
Swabey89 0:61304557ddd1 34 // Enable the main PLL
Swabey89 0:61304557ddd1 35 RCC->CR |= RCC_CR_PLLON;
Swabey89 0:61304557ddd1 36
Swabey89 0:61304557ddd1 37 // Wait till the main PLL is ready
Swabey89 0:61304557ddd1 38 while(!(RCC->CR & RCC_CR_PLLRDY));
Swabey89 0:61304557ddd1 39
Swabey89 0:61304557ddd1 40 // Configure Flash prefetch, Instruction cache, Data cache and wait state
Swabey89 0:61304557ddd1 41 FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
Swabey89 0:61304557ddd1 42
Swabey89 0:61304557ddd1 43 // Select the main PLL as system clock source
Swabey89 0:61304557ddd1 44 RCC->CFGR &=~ RCC_CFGR_SW;
Swabey89 0:61304557ddd1 45 RCC->CFGR |= RCC_CFGR_SW_PLL;
Swabey89 0:61304557ddd1 46
Swabey89 0:61304557ddd1 47 // Wait till the main PLL is used as system clock source
Swabey89 0:61304557ddd1 48 while ((RCC->CFGR & RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
Swabey89 0:61304557ddd1 49
Swabey89 0:61304557ddd1 50 //******************************************************************************
Swabey89 0:61304557ddd1 51 //* END PLL (CLOCKED BY HSI) SETUP CODE *
Swabey89 0:61304557ddd1 52 //******************************************************************************
Swabey89 0:61304557ddd1 53
Swabey89 0:61304557ddd1 54 }