當前位置:首頁 > 單片機 > 單片機
[導讀]一、背景  最近做個項目,需要使用STM32,還是以前一樣的觀點,時鐘就是MCU心臟,供血即時鐘頻率輸出,想要弄明白一個MCU,時鐘是一個非常好的切入點。言歸正傳,網上已經有太多大神詳述過STM32的詳細配置方法了,

一、背景
  最近做個項目,需要使用STM32,還是以前一樣的觀點,時鐘就是MCU心臟,供血即時鐘頻率輸出,想要弄明白一個MCU,時鐘是一個非常好的切入點。言歸正傳,網上已經有太多大神詳述過STM32的詳細配置方法了,在此就簡單介紹下STM32時鐘系統(tǒng),以及如何配置做個簡單記錄,方便以后的快速開發(fā)。

二、正文
  廢話不多說,上一張STM32F10xx的時鐘樹圖:

  

  由圖可知,STM32F10XX有兩級時鐘
  第一級時鐘
    * 高速內部時鐘(HSI)
    * 鎖相環(huán)時鐘(PLLCLK)
    * 高速外部時鐘(HSE)
  第二級時鐘
    * 低速內部時鐘(LSI)
    * 低速外部時鐘(LSE)

  又由圖可知,
    * HSE由外部晶振從"OSC_OUT","OSC_IN"兩腳輸入提供。
    * LSE由外部晶振從"OSC32_OUT","OSC32_IN"兩腳輸入提供。
    * HSI由8MHZ高速內部RC震蕩電路提供。
    * LSI由40kHZ低速內部RC震蕩電路提供。

  STM32F10XX還可通過MCO腳向外提供時鐘輸出。時鐘來源有PLLCLK/HSI/HSE/SYSCLK,由MCO選擇器來選擇。

  研究過時鐘來源,再來研究時鐘的去向,MCU自身要能正常運作,即需要一個時鐘,這個時鐘既是系統(tǒng)時鐘(SYSCLK),而基本上所有外設的時鐘均來自于這個系統(tǒng)時鐘(SYSCLk)。然后由系統(tǒng)時鐘對外提供各種外設時鐘。詳見圖。  

  當然,也有例外,USB時鐘必須為48MHZ,這里的USB時鐘(USBCLK)由PLLCLK直接提供,RTC時鐘(RTCCLK)也不是來源于系統(tǒng)時鐘(SYSCLK),詳見圖?! ?/p>

  時鐘結構大體也就如此,不再深究,網上有許多更加深入的講解,接下來說說如何去配置。用代碼來說明問題:

  先貼文件"system_stm32f10x.c",此文件即庫文件。里面有一個很重要的函數"SystemInit()"

  解析過STM32啟動代碼的朋友都應該知道,這個函數跑在進入main函數之前,里面做的事情即是配置系統(tǒng)時鐘。代碼如下:

voidSystemInit(void){/*ResettheRCCclockconfigurationtothedefaultresetstate(fordebugpurpose)*//*SetHSIONbit*/RCC->CR|=(uint32_t)0x00000001;/*ResetSW,HPRE,PPRE1,PPRE2,ADCPREandMCObits*/#ifndefSTM32F10X_CLRCC->CFGR&=(uint32_t)0xF8FF0000;#elseRCC->CFGR&=(uint32_t)0xF0FF0000;#endif/*STM32F10X_CL*//*ResetHSEON,CSSONandPLLONbits*/RCC->CR&=(uint32_t)0xFEF6FFFF;/*ResetHSEBYPbit*/RCC->CR&=(uint32_t)0xFFFBFFFF;/*ResetPLLSRC,PLLXTPRE,PLLMULandUSBPRE/OTGFSPREbits*/RCC->CFGR&=(uint32_t)0xFF80FFFF;#ifdefSTM32F10X_CL/*ResetPLL2ONandPLL3ONbits*/RCC->CR&=(uint32_t)0xEBFFFFFF;/*Disableallinterruptsandclearpendingbits*/RCC->CIR=0x00FF0000;/*ResetCFGR2register*/RCC->CFGR2=0x00000000;#elifdefined(STM32F10X_LD_VL)||defined(STM32F10X_MD_VL)||(definedSTM32F10X_HD_VL)/*Disableallinterruptsandclearpendingbits*/RCC->CIR=0x009F0000;/*ResetCFGR2register*/RCC->CFGR2=0x00000000;#else/*Disableallinterruptsandclearpendingbits*/RCC->CIR=0x009F0000;#endif/*STM32F10X_CL*/#ifdefined(STM32F10X_HD)||(definedSTM32F10X_XL)||(definedSTM32F10X_HD_VL)#ifdefDATA_IN_ExtSRAMSystemInit_ExtMemCtl();#endif/*DATA_IN_ExtSRAM*/#endif/*ConfiguretheSystemclockfrequency,HCLK,PCLK2andPCLK1prescalers*//*ConfiguretheFlashLatencycyclesandenableprefetchbuffer*/SetSysClock();//此函數在該函數末尾#ifdefVECT_TAB_SRAMSCB->VTOR=SRAM_BASE|VECT_TAB_OFFSET;/*VectorTableRelocationinInternalSRAM.*/#elseSCB->VTOR=FLASH_BASE|VECT_TAB_OFFSET;/*VectorTableRelocationinInternalFLASH.*/#endif}staticvoidSetSysClock(void){//根據宏定義來設置時鐘。#ifdefSYSCLK_FREQ_HSESetSysClockToHSE();#elifdefinedSYSCLK_FREQ_24MHzSetSysClockTo24();#elifdefinedSYSCLK_FREQ_36MHzSetSysClockTo36();#elifdefinedSYSCLK_FREQ_48MHzSetSysClockTo48();#elifdefinedSYSCLK_FREQ_56MHzSetSysClockTo56();#elifdefinedSYSCLK_FREQ_72MHzSetSysClockTo72();//以設置成最大頻率72MHZ為例#endif/*Ifnoneofthedefineaboveisenabled,theHSIisusedasSystemclocksource(defaultafterreset)*/}staticvoidSetSysClockTo72(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;/*SYSCLK,HCLK,PCLK2andPCLK1configuration---------------------------*//*EnableHSE*/RCC->CR|=((uint32_t)RCC_CR_HSEON);/*WaittillHSEisreadyandifTimeoutisreachedexit*/do{HSEStatus=RCC->CR&RCC_CR_HSERDY;StartUpCounter++;}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));if((RCC->CR&RCC_CR_HSERDY)!=RESET){HSEStatus=(uint32_t)0x01;}else{HSEStatus=(uint32_t)0x00;}if(HSEStatus==(uint32_t)0x01){/*EnablePrefetchBuffer*/FLASH->ACR|=FLASH_ACR_PRFTBE;/*Flash2waitstate*/FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_2;/*HCLK=SYSCLK*/RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;/*PCLK2=HCLK*/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;/*PCLK1=HCLK*/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdefSTM32F10X_CL/*ConfigurePLLs------------------------------------------------------*//*PLL2configuration:PLL2CLK=(HSE/5)*8=40MHz*//*PREDIV1configuration:PREDIV1CLK=PLL2/5=8MHz*/RCC->CFGR2&=(uint32_t)~(RCC_CFGR2_PREDIV2|RCC_CFGR2_PLL2MUL|RCC_CFGR2_PREDIV1|RCC_CFGR2_PREDIV1SRC);RCC->CFGR2|=(uint32_t)(RCC_CFGR2_PREDIV2_DIV5|RCC_CFGR2_PLL2MUL8|RCC_CFGR2_PREDIV1SRC_PLL2|RCC_CFGR2_PREDIV1_DIV5);/*EnablePLL2*/RCC->CR|=RCC_CR_PLL2ON;/*WaittillPLL2isready*/while((RCC->CR&RCC_CR_PLL2RDY)==0){}/*PLLconfiguration:PLLCLK=PREDIV1*9=72MHz*/RCC->CFGR&=(uint32_t)~(RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLSRC|RCC_CFGR_PLLMULL);RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLMULL9);#else/*PLLconfiguration:PLLCLK=HSE*9=72MHz*/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLMULL9);#endif/*STM32F10X_CL*//*EnablePLL*/RCC->CR|=RCC_CR_PLLON;/*WaittillPLLisready*/while((RCC->CR&RCC_CR_PLLRDY)==0){}/*SelectPLLassystemclocksource*/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;/*WaittillPLLisusedassystemclocksource*/while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS)!=(uint32_t)0x08){}}else{/*IfHSEfailstostart-up,theapplicationwillhavewrongclockconfiguration.Usercanaddheresomecodetodealwiththiserror*/}}

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉