STM32F407時(shí)鐘樹
最近學(xué)習(xí)下STM32F4的芯片,首先還是要了解時(shí)鐘系統(tǒng)。庫函數(shù)調(diào)用函數(shù)static void SetSysClock(void)初始化時(shí)鐘。依次初始化HCLK、 PCLK2、PCLK1、PLL。最后打開PLL
staticvoidSetSysClock(void)
{
/******************************************************************************/
/*PLL(clockedbyHSE)usedasSystemclocksource*/
/******************************************************************************/
__IOuint32_tStartUpCounter=0,HSEStatus=0;
/*EnableHSE*/
RCC->CR|=((uint32_t)RCC_CR_HSEON);
/*WaittillHSEisreadyandifTimeoutisreachedexit*/
do
{
HSEStatus=RCC->CR&RCC_CR_HSERDY;
StartUpCounter++;
}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));
if((RCC->CR&RCC_CR_HSERDY)!=RESET)
{
HSEStatus=(uint32_t)0x01;
}
else
{
HSEStatus=(uint32_t)0x00;
}
if(HSEStatus==(uint32_t)0x01)
{
/*SelectregulatorvoltageoutputScale1mode*/
RCC->APB1ENR|=RCC_APB1ENR_PWREN;
PWR->CR|=PWR_CR_VOS;
/*HCLK=SYSCLK/1*/
RCC->CFGR|=RCC_CFGR_HPRE_DIV1;
/*PCLK2=HCLK/2*/
RCC->CFGR|=RCC_CFGR_PPRE2_DIV2;
/*PCLK1=HCLK/4*/
RCC->CFGR|=RCC_CFGR_PPRE1_DIV4;
/*ConfigurethemainPLL*/
RCC->PLLCFGR=PLL_M|(PLL_N<<6)|(((PLL_P>>1)-1)<<16)|
(RCC_PLLCFGR_PLLSRC_HSE)|(PLL_Q<<24);
/*EnablethemainPLL*/
RCC->CR|=RCC_CR_PLLON;
/*WaittillthemainPLLisready*/
while((RCC->CR&RCC_CR_PLLRDY)==0)
{
}