Fixed with HAL.
Fork of ST_L152_32MHZ by
Not finish yet. External crystal doesn't work.
ST_L152_32MHZ.cpp
- Committer:
- dreschpe
- Date:
- 2014-03-11
- Revision:
- 0:84e23a19e37d
- Child:
- 1:bdeac50afe1a
File content as of revision 0:84e23a19e37d:
#include "stm32l1xx.h" #include "stm32l1xx_flash.h" #include "stm32l1xx_rcc.h" #include "ST_L152_32MHZ.h" // set cpu clock to 32MHz L152_init32::L152_init32(unsigned int external){ clk_err = setup_clock_32MHZ(external); } #define PLL_STARTUP_TIMEOUT 0x5000 int L152_init32::setup_clock_32MHZ(int external) { uint32_t PLLStartUpCounter = 0,PLLStatus = 0,error; if(external == 0) { // internal Oscillator RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_6,RCC_PLLDiv_3); // setup pll to 96MHz to use USB } else { RCC_HSEConfig(RCC_HSE_ON); // start external crystal osc. error = RCC_WaitForHSEStartUp(); if(error == ERROR ) { // no external crystal return(0); } RCC_PLLConfig(RCC_PLLSource_HSE,RCC_PLLMul_12,RCC_PLLDiv_3); // setup pll to 96MHz to use USB } RCC_PLLCmd(ENABLE); // switch on pll do { PLLStatus = RCC->CR & RCC_CR_PLLRDY; } while((PLLStatus == 0) && (PLLStartUpCounter < PLL_STARTUP_TIMEOUT)); // wait for pll if(PLLStatus == 0) { return(0); } FLASH_SetLatency(FLASH_Latency_1); FLASH_PrefetchBufferCmd(ENABLE); FLASH_ReadAccess64Cmd(ENABLE); RCC_HCLKConfig(RCC_SYSCLK_Div2); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // switch to 32 MHz clock SystemCoreClockUpdate(); // update SystemCoreClock var return(1); }