welcom ! Handel home

2014年6月18日 星期三

ST32M3 RCC_Configuration(void) 系統時序建構函式 注解 說明


//RCC的配置函數,這個函數配置STM32的時鐘,裡面的函數都為STM32的庫函數 

void RCC_Configuration(void) { 
    /* RCC system reset(for debug purpose) */ 
    /* 復位所有的RCC週邊設備寄存器,不改變內部高速振盪器調整位(HSITRIM[4..0])以及 備份域控制寄存器(RCC_BDCR),控制狀態寄存器RCC_CSR */
    RCC_DeInit();   

    /* Enable HSE */
    /* 開啟HSE振盪器 */
    /*
    三個參數 
    RCC_HSE_ON   開啟 
    RCC_HSE_OFF   關閉 
    RCC_HSE_BYPASS 使用外部時鐘振盪器    
    */ 
    RCC_HSEConfig(RCC_HSE_ON); 

    /* Wait till HSE is ready */ 
    /* HSEStartUpStatus為枚舉類型變數,2種取值,
    0為ERROR,
    非0為SUCCESS 
    等待HSE準備好,若超時時間到則退出*/ 
    HSEStartUpStatus = RCC_WaitForHSEStartUp();

    /* 當HSE準備完畢切振盪穩定後 */
    if(HSEStartUpStatus == SUCCESS) { 

        /* HCLK = SYSCLK */ 

        /* 配置AHB時鐘,這個時鐘從SYSCLK分頻而來 分頻係數有1,2,4,8,16,64,128,256,512  */ 
        RCC_HCLKConfig(RCC_SYSCLK_Div1);   

        /* PCLK2 = HCLK */ 
        /* 設置低速APB2時鐘,這個時鐘從AHB時鐘分頻而來 分頻係數為1,2,4,8,16 */ 
        RCC_PCLK2Config(RCC_HCLK_Div1);     

        /* PCLK1 = HCLK/2 */ 
        /* 設置低速APB1時鐘,這個時鐘從AHB時鐘分頻而來 分頻係數為1,2,4,8,16 */    
        RCC_PCLK1Config(RCC_HCLK_Div2);     

        /* Flash 2 wait state */ 
        FLASH_SetLatency(FLASH_Latency_2);

        /* Enable Prefetch Buffer */ 
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);     

        /* PLLCLK = 8MHz * 9 = 72 MHz */ 
        /* 設置PLL的時鐘源和乘法因數 
        第一個入口參數為時鐘源,共3個 
        RCC_PLLSource_HSI_Div2            
        RCC_PLLSource_HSE_Div1 
        RCC_PLLSource_HSE_Div2 
        乘法因數RCC_PLLMul_2~RCC_PLLMul_16,之間參數連續  */ 
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);    

         /* Enable PLL */ 
        /* 輸入參數為ENABLE及DISABLE */      
        RCC_PLLCmd(ENABLE);     

        /* Wait till PLL is ready */ 
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
        } 

        /* Select PLL as system clock source */ 
        /*選擇系統時鐘源,三個參數 
        RCC_SYSCLKSource_HSI   內部高速振盪器 
        RCC_SYSCLKSource_HSE   外部高速振盪器 
        RCC_SYSCLKSource_PLLCLK PLL時鐘 */ 
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);     

        /* Wait till PLL is used as system clock source */ 
        /* 返回系統當前的時鐘源 返回值有3種 
        0x00 HSI是當前時鐘源 
        0x04 HSE是當前時鐘源 
        0x08 PLL是當前時鐘源 */ 
        while(RCC_GetSYSCLKSource() != 0x08){    
        }
    }     

    /* Enable GPIOB, GPIOC and AFIO clocks */ 
    /* 使能低速匯流排APB2上的週邊設備 這裡打開了IO埠B的時鐘
    AFIO是重映射功能的時鐘,一般未使用REMAP功能時,此時鐘不必開啟 
    輸入參數見UM0472 PAGE 426    */ 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 

}

沒有留言: