娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月18日(星期二)

正在發生

2019年02月18日 | STM32系統時鐘配置及時鐘樹

發布者:TranquilSmile 來源: eefocus關鍵字:STM32  系統時鐘配置  時鐘樹 手機看文章 掃描二維碼
隨時隨地手機看文章

參考資料:《 STM32F4xx 中文參考手冊》 RCC 章節。


STM32時鐘可大致分為系統時鐘和其它時鐘兩大類,總共包含5個時鐘源 HSI(High Speed Internal Clock)、HSE(High Speed External Clock)、LSI(low Speed Internal Clock)、LSE(Low Speed External Clock )、PLL(Phase Locked Loop Clock)。


下圖即為STM32時鐘樹,黃色標識部分即為系統時鐘部分,橙色即為其它時鐘部分。



一、系統時鐘


①HSE(High Speed External Clock)高速外部時鐘信號



HSE 是高速的外部時鐘信號,可以由有源晶振或者無源晶振提供,頻率從 4-26MHZ不等。當使用有源晶振時,時鐘從 OSC_IN引腳進入,OSC_OUT 引腳懸空,當選用無源晶振時,時鐘從 OSC_IN 和 OSC_OUT 進入,并且要配諧振電容。HSE 我們使用25M 的無源晶振。如果我們使用 HSE 或者 HSE 經過 PLL倍頻之后的時鐘作為系統時鐘 SYSCLK,當 HSE 故障時候,不僅HSE 會被關閉,PLL也會被關閉,此時高速的內部時鐘時鐘信號HSI 會作為備用的系統時鐘,直到 HSE 恢復正常,HSI=16M。


HSI(High Speed Internal Clock)高速內部時鐘信號



由芯片內部RC振蕩器提供,大小為16MHZ,當HSE故障時,系統時鐘會自動切換到HSI,直到HSE 啟動成功。


②鎖相環 PLL(Phase Locked Loop )



PLL的主要作用是對時鐘進行倍頻,然后把時鐘輸出到各個功能部件。PLL有兩個,一個是主 PLL(黃色部分,為系統時鐘部分),另外一個是專用的 PLLI2S(橙色部分),他們均由 HSE 或者 HSI 提供時鐘輸入信號。


主 PLL有兩路的時鐘輸出,第一個輸出時鐘 PLLCLK用于系統時鐘,第二個輸出用于 USB OTG FS 的時鐘、RNG 和 SDIO 時鐘。專用的 PLLI2S 用于生成精確時鐘,給 I2S 提供時鐘。


HSE 或者 HSI 經過 PLL 時鐘輸入分頻因子 M分頻后,成為 VCO 的時鐘輸入,VCO 的時鐘必須在 1~2M 之間,我們選擇HSE=25M 作為 PLL 的時鐘輸入,M 設置為 25,那么 VCO輸入時鐘就等于 1M。VCO 輸入時鐘經過 VCO倍頻因子 N 倍頻之后,成為 VCO時鐘輸出,VCO時鐘必須在 192~432M 之間。我們配置 N 為 360,則 VCO的輸出時鐘等于 360M。VCO 輸出時鐘之后有三個分頻因子:PLLCLK分頻因子 p,USB OTG FS/RNG/SDIO時鐘分頻因子 Q,分頻因子R


具體公式如下


                                                             PLLCLK = HSE(HSI) / M *N /P 


                                                             PLL48CK =  HSE(HSI) / M *N /Q


③系統時鐘 SYSCLK



系統時鐘來源可以是:HSI、PLLCLK、HSE,具體的由時鐘配置寄存器 RCC_CFGR的 SW位配置。如果系統時鐘是由HSE 經


過 PLL倍頻之后的 PLLCLK 得到,當 HSE 出現故障的時候,系統時鐘會切換為HSI=16M,直到 HSE 恢復正常為止。


④AHB 總線時鐘 HCLK



系統時鐘 SYSCLK 經過 AHB 預分頻器分頻之后得到時鐘叫 AHB 總線時鐘,即 HCLK,分頻因子可以是:[1,2,4,8,16,64,


128,256,512],具體的由時鐘配置寄存器RCC_CFGR 的 HPRE 位設置。片上大部分外設的時鐘都是經過 HCLK 分頻得到,


至于 AHB總線上的外設的時鐘設置為多少,得等到我們使用該外設的時候才設置。這里只需粗線條的設置好AHB的時鐘即可。


⑤APB2總線時鐘 PCLK2



APB2總線時鐘 PCLK2 由 HCLK經過高速 APB2預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置寄存器RCC_CFGR 的 PPRE2位設置。HCLK2屬于高速的總線時鐘,片上高速的外設就掛載到這條總線上,比如全部的 GPIO、USART1、SPI等。至于 APB2總線上的外設的時鐘設置為多少,得等到我們使用該外設的時候才設置。這里只需粗線條的設置好APB2的時鐘即可。


⑥APB1總線時鐘 PCLK1


APB1 總線時鐘 PCLK1 由 HCLK經過低速 APB預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置寄存器RCC_CFGR的 PPRE1位設置。HCLK1屬于低速的總線時鐘,最高為 45M,片上低速的外設就掛載到這條總線上,比如USART2/3/4/5、SPI2/3,I2C1/2等。至于 APB1總線上的外設的時鐘設置為多少,得等到我們使用該外設的時候才設置。


這里只需粗線條的設置好APB的時鐘即可。


系統初始化時鐘過程如下


Reset_Handler    PROC

                 EXPORT  Reset_Handler             [WEAK]

        IMPORT  SystemInit

        IMPORT  __main

 

                 LDR     R0, =SystemInit

                 BLX     R0

                 LDR     R0, =__main

                 BX      R0

                 ENDP


這是一個啟動文件,當我們單片機上電后,首先執行的啟動文件,會進入SystemInit函數


void SystemInit(void)

{

  /* FPU設置 ------------------------------------------------------------*/

  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */

  #endif

  /* 復位RCC時鐘配置到默認的初始化狀態 ------------*/

  /* Set HSION bit */

  RCC->CR |= (uint32_t)0x00000001;

 

  /* Reset CFGR register */

  RCC->CFGR = 0x00000000;

 

  /* Reset HSEON, CSSON and PLLON bits */

  RCC->CR &= (uint32_t)0xFEF6FFFF;

 

  /* Reset PLLCFGR register */

  RCC->PLLCFGR = 0x24003010;

 

  /* Reset HSEBYP bit */

  RCC->CR &= (uint32_t)0xFFFBFFFF;

 

  /* Disable all interrupts */

  RCC->CIR = 0x00000000;

 

#if defined(DATA_IN_ExtSRAM) || defined(DATA_IN_ExtSDRAM)

  SystemInit_ExtMemCtl(); 

#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */

         

  /* 配置系統時鐘 ----------------------------------*/

  SetSysClock();

 

  /* Configure the Vector Table location add offset address ------------------*/

#ifdef VECT_TAB_SRAM

  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */

#else

  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */

#endif

}

在SystemInit中會配置系統時鐘


配置系統時鐘的代碼如下



下面是CMSIS Cortex-M4設備外圍設備訪問層系統源文件中的設置系統時鐘函數SetSysClock(void)


static void SetSysClock(void)

{

 

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

/*            使用HSE作為PLL的輸入來配置系統時鐘                                */

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

  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

  

  /* 一、使能HSE */

  RCC->CR |= ((uint32_t)RCC_CR_HSEON);

 

  /* 等待HSE使能穩定,如果時間超時,則跳出 */

  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;

  }

/*二、HSE穩定后,開始配置HCLK、PCLK2、PCLK1、PLL各自的預分頻因子與倍頻因子 */

  if (HSEStatus == (uint32_t)0x01)

  {



/* 配置HCLK為1分頻,即HCLK = 系統時鐘 HCLK = SYSCLK / 1 */

RCC->CFGR |= RCC_CFGR_HPRE_DIV1;

    

/*配置APB2總線時鐘為2分頻  PCLK2 = HCLK / 2 */

RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;


/*配置APB1總線時鐘為4分頻PCLK1 = HCLK / 4 */

RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;

   

/* 配置主PLL */

RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |

(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);

   

    /* 三、使能主PLL */

    RCC->CR |= RCC_CR_PLLON;

 

    /*等待主PLL穩定 */

    while((RCC->CR & RCC_CR_PLLRDY) == 0)

    {

    }

/*------------------------------------------------------------------------------------------*/    

/* 使能Over-drive 模式來達到更高的時鐘頻率 */

PWR->CR |= PWR_CR_ODEN;

while((PWR->CSR & PWR_CSR_ODRDY) == 0)        //判斷Over-drive模式是否已經成功啟動

{

}

PWR->CR |= PWR_CR_ODSWEN;

while((PWR->CSR & PWR_CSR_ODSWRDY) == 0)

{

}      

/*選擇FLASH預取指緩存的模式, 指令緩存, 數據緩存和等待緩存 */

FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;

/*------------------------------------------------------------------------------------------*/


    /* 四、選擇主PLL作為系統時鐘源 */

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

    RCC->CFGR |= RCC_CFGR_SW_PLL;

 

    /*判斷系統時鐘是否已經穩定 */

    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);

    {

    }

  }

  else

  { /* 如果HSE啟動失敗,那么時鐘就會被錯誤的配置,用戶可以在這里添加一些代碼來處理錯誤 */

  }

 

}

系統時鐘配置主要就是以上部分,系統時鐘初始化就進行的是上述操作.


 


二、其它時鐘


A、RTC時鐘



RTCCLK 時鐘源可以是 HSE 1 MHz( HSE 由一個可編程的預分頻器分頻)、 LSE 或者 LSI 時鐘。選擇方式是編程 RCC 備份


域控制寄存器 (RCC_BDCR) 中的 RTCSEL[1:0] 位和 RCC時鐘配置寄存器 (RCC_CFGR) 中的 RTCPRE[4:0] 位。所做的選擇只


能通過復位備份域的方式修改。我們通常的做法是由 LSE 給 RTC提供時鐘,大小為 32.768KHZ。LSE由外接的晶體諧振器產生,


所配的諧振電容精度要求高,不然很容易不起震。


B、獨立看門狗時鐘



獨立看門狗時鐘由內部的低速時鐘 LSI 提供,大小為 32KHZ。


C、I2S 時鐘



I2S 時鐘可由外部的時鐘引腳 I2S_CKIN 輸入,也可由專用的 PLLI2SCLK提供,具體的由 RCC 時鐘配置寄存器 (RCC_CFGR)的 I2SSCR位配置。


D、PHY以太網時鐘



F429要想實現以太網功能,除了有本身內置的 MAC之外,還需要外接一個 PHY 芯片,常見的 PHY 芯片有 DP83848和LAN8720,其中 DP83848支持 MII 和 RMII 接口,LAN8720只支持 RMII 接口。野火 F429 開發板用的是 RMII 接口,選擇的PHY 芯片是LAB8720。使用 RMII 接口的好處是使用的 IO 減少了一半,速度還是跟 MII 接口一樣。當使用 RMII 接口時,PHY芯片只需輸出一路時鐘給 MCU 即可,如果是 MII 接口,PHY 芯片則需要提供兩路時鐘給 MCU。


E、USB PHY 時鐘



F429 的 USB 沒有集成 PHY,要想實現 USB 高速傳輸的話,必須外置 USB PHY 芯片,常用的芯片是 USB3300。當外接 USBPHY 芯片時,PHY 芯片需要給 MCU 提供一個時鐘。


F、MCO時鐘輸出



MCO 是 microcontroller clock output 的縮寫,是微控制器時鐘輸出引腳,主要作用是可以對外提供時鐘,相當于一個有源晶振。


F429中有兩個 MCO,由 PA8/PC9復用所得。MCO1所需的時鐘源通過 RCC 時鐘配置寄存器 (RCC_CFGR) 中MCO1PRE[2:0]


和MCO1[1:0]位選擇。MCO2所需的時鐘源通過 RCC 時鐘配置寄存器 (RCC_CFGR) 中的MCO2PRE[2:0] 和 MCO2位選擇。


以上就是STM32f429的時鐘樹講解,理解之后,以此類推,對于學習STM32其它時鐘樹有很大的幫助。

關鍵字:STM32  系統時鐘配置  時鐘樹 引用地址:STM32系統時鐘配置及時鐘樹

上一篇:STM32中斷及NVIC概述
下一篇:STM32 的位帶操作

推薦閱讀

0 引 言?進入信息時代,汽車的智能化、個性化需求越來越高,汽車駕乘中的安全、娛樂以及信息服務越來越受到重視。但現有大部分的車載系統都存在功能單一,智能化低,使用不便,不易組網等缺點。隨著無線寬帶網絡的發展、數字移動電視的建設、多媒體技術的應用,集多種功能于一體的無線車載媒體處理系統應運而生,它可廣泛地應用于鐵路、地鐵、客運汽車...
集微網消息,根據華為官方發布的消息顯示,2月18日,5G火車站啟動建設暨華為5G DIS室內數字系統全球首發儀式,將在上海虹橋火車站召開。隨著5G商用臨近,移動互聯網應用的蓬勃發展,使得用戶對流量的消費需求越來越高,同時,也給企業帶來了新的商業機會、以及便民手段。業界需要一張深度覆蓋、支持大容量、可靠的網絡,提供個人業務以及增值業務。而5G室...
英飛凌科技股份公司通過專注于解決當前電源管理設計面臨的挑戰,來實現系統創新和組件水平的改進。“源極底置”是符合行業標準的全新封裝概念。英飛凌已推出第一批基于該封裝概念的功率MOSFET,它們是采用PQFN 3.3x3.3 mm封裝的OptiMOSTM 25 V 功率MOSFET。該器件在MOSFET性能方面樹立了新的行業標桿,不僅通態電阻(RDS(on))降低,還具有業內領先的...
為了進一步加強其不斷增長的硬件業務,Facebook一直在打造一款新的可穿戴設備,該產品將于2022年推出。來自The Information的報道稱,Facebook智能手表將于明年推出。雖然對這款即將推出的設備知之甚少,但該報道補充說,預計它將運行Android--這可能是也可能不是谷歌的Wear操作系統,而且這款手表將包括消息、健康和健身功能?! 〕酥?,據...

史海拾趣

問答坊 | AI 解惑

MSP430系列超低功耗16位單片機原理與應用.

MSP430系列超低功耗16位單片機原理與應用.…

查看全部問答∨

增音型聲力電話圖紙

設備名稱:船用聲力電話(增音型) 產地:日本 廠商:OKI 電路圖: 專用低壓語音傳送芯片:PBL3726_6 [ 本帖最后由 zcgzanne 于 2010-1-26 10:39 編輯 ]…

查看全部問答∨

同行們,請大家看看,運用CORDIC算法時,可否在復數形式下進行步進旋轉,推出計算結果

同行們,請大家看看,運用CORDIC算法時,可否在復數形式下進行步進旋轉,推出計算結果…

查看全部問答∨

wince下用C#怎么實現選擇路徑的對話框?

我要給用戶選擇目錄,在wince下面,用C#有沒有類似FolderBrowserDialogg的目錄對話窗口?怎么做?。?!…

查看全部問答∨

關于wince下網絡驅動的一個問題

  有個問題問下,就是wince下,一般網絡驅動里都有一個wince.c這個文件,里面只有一個dllentry()函數,但是同一個目錄下還有個miniport.c文件,里面有個driverentry().   不知道這兩個入口函數有什么區別啊,現在測試發現只有mini ...…

查看全部問答∨

請教:關于在ccs中,運行出錯的問題。(麻煩各位幫忙了)

我在ccs2.2中,編譯和加載好一個程序后,只要一運行就出現下面的問題,不知道是哪里的問題? Can\'t Run Target CPU: Invalid Destination port address in the trp  The Trp ignored .. QCOMP sent Destination Address 0x1b3f018  ...…

查看全部問答∨

LED芯片技術的發展

  自從1993年Nakamura發明高亮GaN藍光LED以來,LED技術及應用突飛猛進。究其原因有兩個方面:1)全系列RGB LED產 生,其應用面大大拓寬,2)白光LED產生,讓追求低碳時代的人們期望LED盡快成為智能化的第四代固態照明光源。雖然LED的發光效 ...…

查看全部問答∨

uboot引導vxworks

小弟是個十足的菜鳥,由于剛剛涉及vxworks,所以,真誠急切的請教各位大俠: uboot是什么東西?是個工具嗎?是不是能用uboot代替bootrom引導vxworks呢?那么,怎么引導呢? 感激不盡,感激不盡。。。?!?

查看全部問答∨

請教一下中斷的操作問題....

板子終于出來了,可在調試時始終不能進入中斷,系統時鐘的和外部中斷都一樣。先貼出系統時鐘的配置代碼,望大蝦們給指點指點,謝謝!…

查看全部問答∨

求助關于ek-8962 GPIO讀取key值的配置

定義如下: #define KEY1_SYSCTL     SYSCTL_PERIPH_GPIOF               #define KEY1_GPIO_PORT  GPIO_PORTF_BASE   &nb ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 兴隆县| 霍邱县| 江都市| 伽师县| 公主岭市| SHOW| 北海市| 丹阳市| 凤台县| 涟源市| 思茅市| 怀远县| 茶陵县| 昌江| 静乐县| 津市市| 永昌县| 博客| 涟水县| 上犹县| 通山县| 灵山县| 鄢陵县| 确山县| 古丈县| 金山区| 延寿县| 巩留县| 岐山县| 延安市| 南郑县| 康马县| 玉溪市| 扶绥县| 梧州市| 突泉县| 平谷区| 宽甸| 巫山县| 湖南省| 青岛市|