当前位置:首页 > 单片机 > 单片机
[导读]最近学习下STM32F4的芯片,首先还是要了解时钟系统。库函数调用函数static void SetSysClock(void)初始化时钟。依次初始化HCLK、 PCLK2、PCLK1、PLL。最后打开PLLstaticvoidSetSysClock(void){/********************

最近学习下STM32F4的芯片,首先还是要了解时钟系统。库函数调用函数static void SetSysClock(void)初始化时钟。依次初始化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)

{

}






本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭