新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > STM32再學習——時鐘初始化

        STM32再學習——時鐘初始化

        作者:jobs 時間:2013-10-23 來源:電子產品世界 收藏

          系列,或者說是Cortex-M3內核的內,都集成了一個叫的東西。就是鎖相回路或鎖相環(Phase Locked Loop),用來統一整合時脈訊號,使內存能正確的存取資料。用于振蕩器中的反饋技術,將外部的輸入信號與內部的振蕩信號同步,鎖相環路的基本方框圖如下圖所示。一句話,PLL用來控制頻率的。總而言之,系列使用了這個東西,而我們在上電之后,也就要對其正確的初始化,這樣,我們才能得到我們需要的配置。

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

          在ST公司的外設固件庫的示例里,對于工程項目文件,ST并沒有在啟動函數main()里初始化PLL,因為其已經在硬件初始化階段完成對系統的配置。這樣也就帶了一個問題,ST庫里的均使用了外設8MHz的晶振,而我們平時的項目就一定采用的是這個頻率,實際配置的低于8MHz,MCU不能全速運行,高于8MHz,外設時鐘即配置失敗,甚至無法運行。那么如何重新配置時鐘就需要我們一線的工程師們重新設計了。

          ST庫里的硬件初始化階段的代碼是用寄存器方式編寫的,不利于我們閱讀與參考。也正是出于這個原因,小編使用庫函數重新編寫了STM32F系統時鐘PLL初始化過程,與大家分享,期待共同提高與進步。

          /*********************************************************************************************************

          ** Function name: static void SysClockInit(void)

          ** Descriptions: 配置SYSCLK, HCLK, PCLK2與PCLK1

          ** Created by: Jobs Zheng

          ** Created Date: 2013-03-06 09:35

          *********************************************************************************************************/

          static void SysClockInit(void)

          {

          RCC_DeInit();/* RCC重置 */

          RCC_HSEConfig(RCC_HSE_ON); /*(使能HSE)*/

          HSEStartUpStatus = RCC_WaitForHSEStartUp();/*(等待HSE使能結束)*/

          if (HSEStartUpStatus == SUCCESS)

          {

          FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

          FLASH_SetLatency(FLASH_Latency_2);

          RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 配置HCLK = SYSCLK */

          RCC_PCLK2Config(RCC_HCLK_Div1); /* 配置PCLK2 = HCLK */

          RCC_PCLK1Config(RCC_HCLK_Div2); /* 配置PCLK1 = HCLK/2 */

          /* 超級重要的、需要配置的地方在這里 */

          /* PLLCLK = 8MHz * 9 = 72 MHz */

          RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* RCC_PLLSource_HSE_Div1為外置晶振的分頻系數;RCC_PLLMul_9為倍頻數 */

          RCC_PLLCmd(ENABLE);

          while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

          {

          }

          RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 選定PLL為系統主時鐘 */

          while(RCC_GetSYSCLKSource() != 0x08)

          {

          }

          }

          else

          { /* 配置失敗將程序停留在這里 */

          while (1)

          {

          }

          }

          }

          上述C語言的文件仍需要#include "stm32f10x.h"的頭文件來調用ST固件庫。

          就像ST官方說明文檔所說,STM32F系列MCU支持4M-16MHz的外置晶振,因此,大家在沒有官方默認的8Mhz晶振下,大可不必苦惱,只需要添加上面的這個初始化函數,你就可以任意使用外置晶振了。

          祝大家工作順利,編程快樂 ^_^

         

        c語言相關文章:c語言教程


        晶振相關文章:晶振原理
        鎖相環相關文章:鎖相環原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 边坝县| 台山市| 车险| 石台县| 杭锦后旗| 唐河县| 图片| 兖州市| 富平县| 呼伦贝尔市| 淮安市| 抚远县| 亳州市| 沙洋县| 长葛市| 福清市| 普陀区| 长海县| 冀州市| 波密县| 新兴县| 靖江市| 平安县| 安丘市| 朔州市| 措美县| 岱山县| 天峻县| 孝昌县| 达尔| 固镇县| 沙河市| 瑞金市| 志丹县| 满城县| 奉贤区| 平潭县| 漯河市| 常德市| 安岳县| 海晏县|