【RoboMaster】迅速入門,一次理解時鐘樹!【STM32】

同步博客地址從STM32開始的RoboMaster生活:進階篇 V [Clock Tree]

項目&教程倉庫-STM32-RoboMaster-


1.0 什麼是Clock Tree?

1.1 定義

時鐘是單片機運行的基礎,時鐘信號推動單片機內各個部分執行相應的指令。時鐘系統就是CPU的心臟,決定CPU速率,像人的心跳一樣 只有有了心跳,人才能做其他的事情,而單片機有了時鐘,才能夠運行執行指令,才能夠做其他的處理(點燈,串口,ADC),時鐘的重要性不言而喻。

STM32本身十分複雜,外設非常多 但我們實際使用的時候只會用到有限的幾個外設,使用任何外設都需要時鐘才能啓動,但並不是所有的外設都需要系統時鐘那麼高的頻率,爲了兼容不同速度的設備,有些高速,有些低速,如果都用高速時鐘,勢必造成浪費 並且,同一個電路,時鐘越快功耗越快,同時抗電磁干擾能力也就越弱,所以較爲複雜的MCU都是採用多時鐘源的方法來解決這些問題。所以便有了STM32的時鐘系統和時鐘樹。

  1. STM32時鐘系統主要的目的就是給相對獨立的外設模塊提供時鐘,也是爲了降低整個芯片的耗能
  2. 系統時鐘,是處理器運行時間基準(每一條機器指令一個時鐘週期)
  3. 時鐘是單片機運行的基礎,時鐘信號推動單片機內各個部分執行相應的指令。
  4. 一個單片機內提供多個不同的系統時鐘,可以適應更多的應用場合。
  5. 不同的功能模塊會有不同的時鐘上限,因此提供不同的時鐘,也能在一個單片機內放置更多的功能模塊。
  6. 對不同模塊的時鐘增加開啓和關閉功能,可以降低單片機的功耗
  7. STM32爲了低功耗,他將所有的外設時鐘都設置爲disable(不使能),用到什麼外設,只要打開對應外設的時鐘就可以,其他的沒用到的可以還是disable(不使能),這樣耗能就會減少。這就是爲什麼不管你配置什麼功能都需要先打開對應的時鐘的原因。

1.2 解析

https://i.loli.net/2020/03/19/jq3UoHD2Jn4hbWA.png

先不要被嚇到,我們慢慢來一條線一條線地梳理清楚。

除了時鐘,有兩個概念必須提前講解

PLL and Prescaler.png

  • Phase-Locked Loop ( PLL ) :鎖相環 的作用是整數倍地增高頻率
  • Prescaler:預分頻器 的作用是整數倍地降低頻率

在STM32F4系列中,有5個最重要的時鐘源,爲HSI、HSE、LSI、LSE、PLL。其中PLL實際是分爲三個時鐘源,分別爲主PLL和I2S部分專用PLLI2S和SAI部分專用PLLSAI。從時鐘頻率來分可以分爲高速時鐘源和低速時鐘源,在這5箇中HSI,HSE以及PLL是高速時鐘,LSI和LSE是低速時鐘。從來源可分爲外部時鐘源和內部時鐘源,外部時鐘源就是從外部通過接晶振的方式獲取時鐘源,其中HSE和LSE是外部時鐘源,其他的是內部時鐘源。

  • ❶ LSI:Low Speed Internal 低速內部時鐘,RC振盪器,頻率爲32kHz左右,供獨立看門狗和自動喚醒單元使用
  • ❷ LSE:Low Speed External 低速外部時鐘,接頻率爲32.768kHz的石英晶體,這個主要是RTC的時鐘源
  • ❸ HSE:High Speed External 高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率範圍爲4MHz~26MHz,HSE也可以直接做爲系統時鐘或者PLL輸入
  • ❹ HSI:High Speed Internal 高速內部時鐘,RC振盪器,頻率爲16MHz,可以直接作爲系統時鐘或者用作PLL輸入
  • ❺ PLL:Phase-Locked Loop 鎖相環倍頻輸出,STM32F4有三個PLL
    1. 主PLL由HSE或者HSI提供時鐘信號,並具有兩個不同的輸出時鐘,第一個輸出PLLP用於生成高速的系統時鐘(最高180MHz);第二個輸出PLLQ爲48M時鐘,用於USB OTG FS時鐘,隨機數發生器的時鐘,和SDIO時鐘
    2. 第一個專用PLL ( PLLI2S ) 用於生成精確時鐘,在I2S和SAI1上實現高品質音頻性能,其中,N是用於PLLI2S vco的倍頻係數,其取值範圍是:192~432;R是I2S時鐘的分頻係數,其取值範圍是:2~7;Q是SAI時鐘分頻係數,其取值範圍是:2~15;P沒用到
    3. 第二個專用PLL ( PLLSAI ) 同樣用於生成精確時鐘,用於SAI1輸入時鐘,同時還爲LCD_TFT接口提供精確時鐘,其中,N是用於PLLSAI vco的倍頻係數,其取值範圍是:192~432;Q是SAI時鐘分頻係數,其取值範圍是:2~15;R是LTDC時鐘的分頻係數,其取值範圍是:2~7;P沒用到
  • A 看門狗時鐘:看門狗時鐘源只能是低速的 LSI 時鐘
  • B RTC時鐘源:RTC的時鐘源可以選擇LSI,LSE,以及HSE分頻後的時鐘,HSE 分頻係數爲2~31
  • C MCO1 MCO2輸出時鐘:MCO1是向芯片的PA8引腳輸出時鐘,它有四個時鐘來源分別爲:HSI,LSE,HSE,和PLL時鐘;MCO2是向芯片的PC9輸出時鐘,它同樣有四個時鐘來源分別爲:HSE,PLL,SYSCLK以及PLLI2S時鐘;MCO輸出時鐘頻率最大不超過100MHz
  • D 系統時鐘:SYSCLK系統時鐘來源有三個方面:HSI,HSE,和PLL,在我們實際應用中,因爲對時鐘速度要求都比較高我們纔會選用STM32F4這種高性能處理器,所以一般情況下,都是採用PLL作爲SYSCLK時鐘源
  • E 以太網PTP時鐘 AHB時鐘 APB2高速時鐘 APB1低速時鐘:這些時鐘都是來源於 SYSCLK系統時鐘,其中以太網PTP時鐘是使用系統時鐘,AHB,APB2,和APB1時鐘是經過SYSCLK時鐘分頻得來,這裏大家記住,AHB最大時鐘爲168MHz,APB2高速時鐘最大頻率爲84MHz,而APB1低速時鐘最大頻率爲42MHz
  • F PLLI2S_R時鐘:可以作爲I2S時鐘源
  • G PLLI2S_Q時鐘:可以作爲SAI1_A和SAI1_B時鐘來源
  • H PLLSAI_Q時鐘:可以作爲SAI1_A和SAI1_B時鐘來源
  • I PLLSAI_R時鐘:LCD-TFT ( LTDC ) 接口時鐘唯一來源
  • J 以太網MAC時鐘:對於MII接口來說,必須向外部PHY芯片提供25Mhz的時鐘,這個時鐘,可以由PHY芯片外接晶振,或者使用STM32F4的MCO輸出來提供,然後,PHY芯片再給STM32F4提供ETH_MII_TX_CLK和ETH_MII_RX_CLK時鐘,對於RMII接口來說,外部必須提供50Mhz的時鐘驅動PHY和STM32F4的 ETH_RMII_REF_CLK,這個50Mhz時鐘可以來自PHY,有源晶振,或者STM32F4的MCO
  • K USB OTG HS時鐘:指外部PHY提供的USB OTG HS ( 60MHZ ) 時鐘

2.0 如何配置Clock Tree?

  • 配置方式
    • STM32CubeMX靜態調控
    • 函數動態調控(RM暫時用不上,這部分不講解)
  • STM32CubeMX
    • Input frequency改爲12MHz
    • PLL Source Mux選擇HSE,因爲HSE比HSI的精確性和最大頻率高得多
    • System Clock Mux選擇PLLCLK,因爲即便選擇HSE,頻率依然不足,而PLLCLK可以成倍增加頻率
    • 最後,在Ethernet PTP clock那裏,輸入168MHz,回車,STM32CubeMX會自動配置剩下的東西,到這一步,iRM2018的Clock Tree就已經配置完成了!
    • 可能到這一步,I2S source Mux不是48MHz,並且是灰色,無法修改,那就暫時不用動了

如果你成功了,將會看到下面這個配置

iRM 2018 Clock Tree.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章