STM32時鍾樹


STM32的時鍾系統

相較於51單片機,stm32的時鍾系統可以說是非常復雜了,我們現在看下面的一張圖:

上圖說明了時鍾的走向,是從左至右的從時鍾源一步步的分配給外設時鍾。需要注意的是,上圖左側一共有四個時鍾源,從上到下依次是:

高速內部時鍾(HSI):以內部RC振盪器產生,頻率為8Mhz,但相較於外部時鍾不穩定。

高速內部時鍾(HSE):以外部晶振作為時鍾源,晶振頻率可取范圍為4~16Mhz,一般采用8Mhz的晶振。

低速外部時鍾(LSE): 以外部晶振作為時鍾源,主要是提供給實時時鍾模塊,所以一般選用32.768khz,該頻率下定時器方便取整。

低速內部時鍾(LSI): 從內部RC振盪器產生,頻率為40khz,也是主要提供給實時時鍾模塊。

根據上圖,以我們最常用的高速外部時鍾為例,沿着路線一步步的分析:

  1. 從最左端的OSC_OUT和OSC_IN開始,這兩個引腳分別連接到外部晶振的兩端。

  2. 我們假設連接的晶振為8Mhz,它遇到了第一個分頻器PLLXTPRE。在這個分頻器中,可以選擇設置二分頻,或者不分頻。這里我們選擇不分頻。

  3. 然后箭頭指向了開關PLLSRC,這個開關可以選擇HSE或者HSI作為其時鍾輸出。這里我們選擇HSE,緊接着又遇到鎖相環PLL,也叫倍頻器。我們可以設定2到16的倍頻因子(PLLMUL),經過PLL的時鍾稱為PLLCLK。在這里設置倍頻因子為9,也就是說乘以9,PLLCLK為72Mhz。

  4. 然后又遇到一個開關SW,經過這個開關之后就是STM32的系統時鍾(SYSCLK)了。通過這個開關,可以切換SYSCLK的時鍾源,有HSI,PLLCLK,HSE三個選擇。我們選擇PLLCLK時鍾,所以SYSCLK就為72Mhz了。

  5. PLLCLK在輸入到SW前,還流向了USB預分頻器,所以這個PLLCLK也作為USB的時鍾。

  6. 再繼續看SYSCLK,SYSCLK經過AHB預分頻器,分頻后再輸入到其他外設。本例中AHB不分頻,直接輸入到HCLK,FCLK或者SDIOCLK等時鍾。

  7. 接下來看最后一層,GPIO外設是掛載在APB2總線上的,APB2總線的時鍾來源於APB2預分頻器,在APB2預分頻器中可以選擇/2,/4,/8,/16這幾個分頻倍數。在這里我選擇不分頻率,也就是說,GPIO的時鍾也為72Mhz

上面這一套流程走下來,經歷了一系列的分頻和倍頻,得到了幾個與我們開發密切相關的時鍾。

1.SYSCLK:系統時鍾,是STM32大部分器件的時鍾來源,主要由AHB預分頻器分配到各個部件。

2.HCLK:由AHB預分頻器直接輸出得到,它是高速總線AHB的時鍾信號,提供給存儲器,DMA及Cortex內核,是Cortex內核運行的時鍾,CPU主頻就是這個信號。

3.FCLK:也是由AHB輸出得到,是內核的“自由運行時鍾”。“自由”表現在它不來自時鍾HCLK。因此在HCLK停止時FCLK也可以繼續運行。也就是說,即使CPU休眠了,也能夠采樣到外部中斷和跟蹤休眠事件。低功耗模式下使用。

4.PCLK1:外設時鍾,由APB1分頻得到,最大可為72Mhz,提供給APB1總線上的外設使用。

5.PCLK2:外設時鍾,由APB2預分頻輸出得到,最大為72Mhz,提供給APB2總線上的外設。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM