RCC时钟配置

STM32有3个系统时钟源(HSI、HSE和PLL)和2个RTC时钟源(LSI和LSE),系统上电默认是HSI 8MHZ启动,要想系统跑72MHZ,则必须对RTC时钟进行配置。


寄存器配置大致步骤:

1) 打开HSE外部高速时钟,并等待至其打开

RCC_CR |= 0x00010000;                   //set HSEON  ON

while((RCC_CR & (1<<17)) == 0);    //HSERDY ON?

2) 设置HCLK、PCLK1和PCLK2时钟

RCC_CFGR &= 0xFFFFFF0F;          //HCLK=SYSCLK

RCC_CFGR &= 0xFFFFC7FF;         //PCLK2=HCLK

RCC_CFGR = (RCC_CFGR & 0xFFFFF8FF) | 0x00000400;     //PCLK1=HCLK/2

3)使能预取值缓冲

FLASH_ACR |= 0x00000010;   

FLASH_ACR =(FLASH_ACR & 0xFFFFFFF8) | 0x00000002;

4)设置PLL倍频,并打开PLL时钟(PLL可取2~16,但最好别超过72MHZ)

RCC_CFGR = (RCC_CFGR & 0xFFDFFFFF) | 0x00D00000;

RCC_CR |= 1<<24;

while((RCC_CR & (1<<25)) == 0);

5)配置PLL时钟为系统时钟源,并等待配置完成

RCC_CFGR = (RCC_CFGR & 0xFFFFFFFE) | 0x00000002;

while((RCC_CFGR & 0x0000000C) != 0x08);


库函数版:

  RCC_DeInit();          //将外设RCC寄存器重设为缺省值

  //设置外部高速晶振(HSE

  RCC_HSEConfig(RCC_HSE_ON);   //RCC_HSE_ON——HSE晶振打开(ON)

  //等待HSE起振

  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)        //SUCCESSHSE晶振稳定且就绪

  {

    //设置AHB时钟(HCLK

    RCC_HCLKConfig(RCC_SYSCLK_Div1);  //RCC_SYSCLK_Div1——AHB时钟系统时钟

    /*/设置高速AHB时钟(PCLK2

    RCC_PCLK2Config(RCC_HCLK_Div1);   //RCC_HCLK_Div1——APB2时钟= HCLK

    //设置低速AHB时钟(PCLK1 

RCC_PCLK1Config(RCC_HCLK_Div2);   //RCC_HCLK_Div2——APB1时钟= HCLK / 2

    //设置FLASH存储器延时时钟周期数

    FLASH_SetLatency(FLASH_Latency_2);    //FLASH_Latency_2  2延时周期

    //选择FLASH预取指缓存的模式

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);      // 预取指缓存使能

    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);      // PLL=输入时钟HSEx 9

    RCC_PLLCmd(ENABLE);    //使能PLL 

    //检查指定的RCC标志位(PLL准备好标志)设置与否

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

;

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //设置系统时钟(SYSCLK),选择PLL作为系统时钟

    while(RCC_GetSYSCLKSource() != 0x08)        //0x08PLL作为系统时钟

     ;


你可能感兴趣的:(STM32)