/*
* STM32L052x8 System Setup Code
*
* This file is part of 'STM32L052' code template'.
*
* It is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2 of the License.
*
* This code is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this template. If not, see .
* ------------------------------------------------------------------------
*/
#include
#include
/**
* @brief Init for 32 MHz clock
*/
static void __init_default_clocks(void)
{
uint32_t tmp;
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
/* Set Flash Waitstate */
FLASH->ACR |= FLASH_ACR_LATENCY;
/* Configure interal voltage regualtor to range 1 (1.8V) */
PWR->CR = PWR_CR_VOS_0;
/* Enable MSI osc as main source for now to ensure we're running stable */
tmp = RCC->CFGR;
tmp &= ~0x3;
RCC->CFGR = tmp;
/* Enable HSI */
RCC->CR |= RCC_CR_HSION;
/* Wait for HSI to be ready */
while (!(RCC->CR & RCC_CR_HSIRDY));
/* Disable PLL */
RCC->CR &= ~RCC_CR_PLLON;
while (RCC->CR & RCC_CR_PLLRDY);
/* Reset PLL and clock div config etc. */
RCC->CFGR = 0;
/* Configure PLL for HSI input and 32 MHz output
* PLLDIV = 2
* PLLMUL = x4
*/
RCC->CFGR |= RCC_CFGR_PLLDIV_0 | RCC_CFGR_PLLMUL_0;
/* Startup PLL */
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY));
/* Switch over to PLL clock. Prescalers for buses are finde with div by 1 for 32 MHz */
RCC->CFGR |= RCC_CFGR_SW_0 | RCC_CFGR_SW_1;
}
void __system_init(void)
{
__init_default_clocks();
}