新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32變更外部晶振時如何配置時鐘、以及HSI的使用

        stm32變更外部晶振時如何配置時鐘、以及HSI的使用

        作者: 時間:2016-11-17 來源:網絡 收藏
        由于stm32的庫默認是外部晶振8M的情況下實現的,所以配置串口波特率的時候也是按8M,包括主頻。
        如果采用外部晶振12M,配置時鐘為72MHZ。

        1)PLL倍頻這樣改:
        8M:
        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72
        12M:
        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);//12*6=72
        庫函數:voidRCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
        例:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);

        2)stm32f10x.h中修改:
        8M:
        #define HSE_Value ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
        12M:
        #define HSE_Value ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
        接下來說一下內部時鐘,內部時鐘是由RC振蕩產生的,精度不高。用內部時鐘產生的功耗更小,還可以節約印制板的空間,程序配置如下:
        void RCC_Configuration(void)
        {
        /* RCC system reset(for debug purpose) */
        RCC_DeInit();
        RCC_HSICmd(ENABLE); //打開內部高速時鐘
        //等待HSI準備好
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //開啟FLASH預取指功能
        //FLASH時序控制
        //推薦值:SYSCLK = 0~24MHz Latency=0
        // SYSCLK = 24~48MHz Latency=1
        // SYSCLK = 48~72MHz Latency=2
        FLASH_SetLatency(FLASH_Latency_2);
        RCC_HCLKConfig(RCC_SYSCLK_Div1); //設置HCLK(AHB時鐘)=SYSCLK
        RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2(APB2) = HCLK
        RCC_PCLK1Config(RCC_HCLK_Div1); //PCLK1(APB1) = HCLK
        //PLL設置 SYSCLK/2 * 12 = 4*12 = 48MHz
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
        //啟動PLL
        RCC_PLLCmd(ENABLE);//如果PLL被用于系統時鐘,不能被DISABLE
        //等待PLL穩定
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){;}
        //設置系統時鐘SYSCLK = PLL輸出
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        //等待PLL成功用作于系統時鐘的時鐘源,并等待穩定
        // 0x00:HSI作為系統時鐘
        // 0x04:HSE作為系統時鐘
        // 0x08:PLL作為系統時鐘
        while(RCC_GetSYSCLKSource() != 0x08);
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴安盟| 龙井市| 莱阳市| 鄂尔多斯市| 东明县| 沁阳市| 任丘市| 大名县| 巩义市| 丰镇市| 东乡族自治县| 都兰县| 正阳县| 怀来县| 平潭县| 青海省| 康保县| 庆安县| 西华县| 汶上县| 子长县| 渭南市| 固原市| 岐山县| 商洛市| 黔西县| 江津市| 松江区| 海安县| 温宿县| 龙里县| 大悟县| 延吉市| 台江县| 北碚区| 香河县| 社旗县| 宾川县| 商都县| 安陆市| 日喀则市|