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:
- 1:bdeac50afe1a
- Parent:
- 0:84e23a19e37d
- Child:
- 2:9e2ba1d93567
File content as of revision 1:bdeac50afe1a:
/* mbed library for the ST NUCLEO board L152RE
* to change the CPU clock to 32 MHz
* A pll clock of 96 MHz is used to enable USB
*
* Copyright (c) 2014 Peter Drescher - DC2PD
* Released under the MIT License: http://mbed.org/license/mit
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "stm32l1xx.h"
#include "stm32l1xx_flash.h"
#include "stm32l1xx_rcc.h"
#include "ST_L152_32MHZ.h"
// only the constructor
L152_init32::L152_init32(unsigned int external){
Status = setup_clock_32MHZ(external);
}
#define PLL_STARTUP_TIMEOUT 0x5000
ClockStatus 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(EXT_ERR);
}
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(PLL_ERR);
}
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(OK);
}
