天天看點

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)        //SUCCESS:HSE晶振穩定且就緒

  {

    //設定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)        //0x08:PLL作為系統時鐘

     ;

繼續閱讀