void clock_init(void)
{
	RCC->CR |= RCC_CR_HSEON;
	while( !(RCC->CR & RCC_CR_HSERDY) ){}

	FLASH->ACR &= ~FLASH_ACR_LATENCY;
	FLASH->ACR |= FLASH_ACR_LATENCY_0;
	FLASH->ACR |= FLASH_ACR_PRFTBE;

	RCC->CFGR |= RCC_CFGR_PLLSRC;
	RCC->CFGR |= RCC_CFGR_PLLMULL6;

	RCC->CFGR |= RCC_CFGR_PPRE1_DIV2;

	RCC->CR |= RCC_CR_PLLON;
	while( !(RCC->CR & RCC_CR_PLLRDY) ){}

	RCC->CFGR |= RCC_CFGR_SW_PLL;
	while( (RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08 ){}

	SystemCoreClockUpdate();

	if(SysTick_Config(SystemCoreClock/1000))
	{
		while(1){}
	}
}