新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 固件庫中RCC_GetClocksFreq()函數注意事項

        STM32 固件庫中RCC_GetClocksFreq()函數注意事項

        作者: 時間:2016-12-02 來源:網絡 收藏
        STM32固件庫中,當你使用RCC_GetClocksFreq()這個函數的時候,需要注意一下。

        (比如,你在使用串口的USART_Init的時候,就無形中使用到這個函數)。

        本文引用地址:http://www.104case.com/article/201612/325062.htm

        當你使用外部晶振做為系統時鐘的時候,而且外部晶振不是標準8MHz的時候,
        你需要留意一下STM32的固件庫,里面的stm32f10x_rcc.c這個文件,
        在它的RCC_GetClocksFreq()這個函數中,有這么一段

        void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
        {
        u32 tmp = 0, pllmull = 0, pllsource = 0, presc = 0;

        /* Get SYSCLK source ——————————————————-*/
        tmp = RCC->CFGR & CFGR_SWS_Mask;

        switch (tmp)
        {
        case 0×00:/* HSI used as system clock */
        RCC_Clocks->SYSCLK_Frequency = HSI_Value;
        break;

        case 0×04:/* HSE used as system clock */
        RCC_Clocks->SYSCLK_Frequency=HSE_Value;
        break;

        case 0×08:/* PLL used as system clock */
        /* Get PLL clock source and multiplication factor ———————-*/
        pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
        pllmull = ( pllmull >> 18) + 2;

        pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;

        if (pllsource == 0×00)
        {/* HSI oscillator clock divided by 2 selected as PLL clock entry */
        RCC_Clocks->SYSCLK_Frequency = (HSI_Value >> 1) * pllmull;
        }
        else
        {/* HSE selected as PLL clock entry */

        if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (u32)RESET)
        {/* HSE oscillator clock divided by 2 */

        RCC_Clocks->SYSCLK_Frequency= (HSE_Value >> 1) * pllmull;
        }
        else
        {
        RCC_Clocks->SYSCLK_Frequency=HSE_Value* pllmull;
        }
        }
        break;

        default:
        RCC_Clocks->SYSCLK_Frequency = HSI_Value;
        break;
        }
        …. //省略以下代碼
        }

        我們追蹤到 HSE_Value 的定義

        /* In the following line adjust the value of External High Speed oscillator (HSE)
        used in your application */
        #defineHSE_Value((u32)8000000) /* Value of the External oscillator in Hz*/

        上面的定義說明:你需要在你的實際應用的時候,跟據實際的外部晶振的值,修改HSE_Value的值。
        如果沒有留意到這個情況的話,所有的跟求系統頻率有關的應用,都會出錯,例如在固件庫stm32f10x_usart.c中的設計串口波特率的時候。。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 郧西县| 涡阳县| 海南省| 平阳县| 西峡县| 梁山县| 桃园县| 桦川县| 叙永县| 丰原市| 彰武县| 五莲县| 綦江县| 千阳县| 宜宾县| 彰化县| 班戈县| 井研县| 高密市| 来安县| 星座| 岚皋县| 峡江县| 富蕴县| 克拉玛依市| 拜泉县| 和田县| 万载县| 曲麻莱县| 禄丰县| 定南县| 习水县| 玉环县| 大英县| 布尔津县| 穆棱市| 肥西县| 晴隆县| 嘉黎县| 个旧市| 司法|