From f886d12a39d3d9c293eb87aa239165f1f52cd9f0 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sat, 3 Dec 2011 19:12:02 +0100 Subject: hal/rcc.cpp --- hal/rcc.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/hal/rcc.cpp b/hal/rcc.cpp index e3ae38d..5a82d62 100644 --- a/hal/rcc.cpp +++ b/hal/rcc.cpp @@ -2,6 +2,8 @@ #include "stm32.h" void rcc_init() { + #if defined(STM32F1) + // Set flash latency. FLASH.ACR = 0x12; @@ -12,7 +14,7 @@ void rcc_init() { // Configure and enable PLL. RCC.CFGR = 0x1d0000; RCC.CR |= 0x1000000; - while(RCC.CR & 0x2000000); + while(!(RCC.CR & 0x2000000)); // Switch to PLL. RCC.CFGR |= 0x2; @@ -23,4 +25,32 @@ void rcc_init() { // Set ADCCLK prescaler to /6. RCC.CFGR |= 0x8000; + + #elif defined(STM32F4) + + // Set flash latency. + FLASH.ACR = 0x105; + + while(FLASH.ACR != 0x105); + + // Enable HSE. + RCC.CR |= 0x10000; + while(!(RCC.CR & 0x20000)); + + // Configure and enable PLL. + RCC.PLLCFGR = 0x20400000 | (7 << 24) | (2 * 168 << 6) | 8; + RCC.CR |= 0x1000000; + while(!(RCC.CR & 0x2000000)); + + // Switch to PLL. + RCC.CFGR |= 0x2; + while(!(RCC.CFGR & 0x8)); + + // Set APB1 prescaler to /4. + RCC.CFGR |= 5 << 10; + + // Set APB2 prescaler to /2. + RCC.CFGR |= 4 << 13; + + #endif } -- cgit v1.2.3