STM32F429微控制器的時鐘系統淺析
先把429的時鐘樹附上:
乍一看是不是很懵逼,我也很懵逼。。。一堆亂七八糟的玩意,ST公司是真的狗。
本文是基於庫函式SetSysClock()展開的,配合該函式使用時鐘樹效果更佳O(∩_∩)O。
講解之間說一個英文簡寫對應的中文名稱:
- HSE: 高速外部時鐘
- HSI : 高速內部時鐘
- PLL: 鎖相環
- SYSCLK: 系統時鐘
- HCLK: AHB匯流排時鐘
- HCLK2:APB2匯流排時鐘
- HCLK1: APB1匯流排時鐘
微控制器的時鐘來源
微控制器的時鐘是由HSE提供,而HSE是由有源晶振或無源晶振提供的,就是開發板上一坨銀色的,像個膠囊一樣的東西,上面還刻著數字,可以觀察一下你們的開發板。一般晶振大小為4~26Mhz,8Mhz和25Mhz比較常見。使用有源晶振時,時鐘從 OSC_IN 引腳進入,OSC_OUT 引腳懸空(看最開始的圖),當選用無源晶振時,時鐘從 OSC_IN 和 OSC_OUT 進入,並且要配諧振電容。如果HSE發生故障,則HSI頂上,HSI=16M,直到HSE回覆正常後才切換回HSE,簡單來說,HSI相當於一個備胎。下面就從OSC_IN和OSC_OUT這裡開始,逐漸深入。
PLL倍頻
如果僅僅使用HSE的時鐘做為系統時鐘,那就太慢了,跑一個程式要等猴年馬月,為了加快微控制器的執行速度,假如了一個叫鎖相環的東西,用來倍頻。之後把倍頻後的時鐘輸出到各個功能部件。這是需要說明的是,如果HSI作為時鐘源,那麼PLL將失去作用,微控制器就變成了植物人了。
429的PLL有兩個,一個是主 PLL,另外一個是專用的 PLLI2S,它們均由 HSE 或者 HSI 提供時鐘輸入訊號。
主 PLL 有兩路的時鐘輸出,第一個輸出時鐘 PLLCLK 用於生成SYSCLK,F429 規定最高180M(圖中的SW),第二個輸出用於 USB OTG FS 的時鐘(48M)、RNG 和 SDIO 時鐘(<=48M)筆者水平有限,這方面就不分析了。
專用的 PLLI2S 用於生成精確時鐘,給 I2S 提供時鐘。HSE 或者 HSI 經過 PLL 時鐘輸入分頻因子 M(2~63)分頻後,成為 VCO 的時鐘輸入,
VCO 的時鐘必須在 1~2M 之間,我們選擇 HSE=25M 作為 PLL 的時鐘輸入,M 設定為 25,
那麼 VCO 輸入時鐘就等於 1M。
系統時鐘SYSCLK
根據時鐘樹可以看出來,SYSCLK的來源主要有PLLCLK、HSI、HSE這三個,大多數情況下我們是選擇PLLCLK作為SYSCLK,具體的由時鐘配置暫存器RCC_CFGR的 SW 位配置。假設這裡設定系統時鐘:SYSCLK = PLLCLK = 180M。如果系統時鐘是由HSE 經過 PLL 倍頻之後的 PLLCLK 得到,當 HSE 出現故障的時候,系統時鐘會切換為HSI=16M,直到 HSE 恢復正常為止。
AHB 匯流排時鐘 HCLK
系統時鐘 SYSCLK 經過 AHB 預分頻器分頻之後得到時鐘叫 APB 匯流排時鐘,即 HCLK,分頻因子可以是:[1,2,4,8,16,64,128,256,512],具體的由時鐘配置暫存器RCC_CFGR 的 HPRE 位設定。片上大部分外設的時鐘都是經過 HCLK 分頻得到,至於 AHB匯流排上的外設的時鐘設定為多少,得等到我們使用該外設的時候才設定,我們這裡只需粗線條的設定好 APB 的時鐘即可。假設這裡設定為 1 分頻,即 HCLK=SYSCLK=180M。
APB2 匯流排時鐘 HCLK2
APB2 匯流排時鐘 PCLK2 由 HCLK 經過高速 APB2 預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置暫存器RCC_CFGR 的 PPRE2 位設定。HCLK2 屬於高速的匯流排時鐘,片上高速的外設就掛載到這條匯流排上,比如全部的GPIO、USART1、SPI1等。至於 APB2 匯流排上的外設的時鐘設定為多少,得等到我們使用該外設的時候才設定。HCLK2的最大值為90M。
APB1 匯流排時鐘 HCLK1
APB1 匯流排時鐘 PCLK1 由 HCLK 經過低速 APB 預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置暫存器 RCC_CFGR 的 PPRE1 位設定。HCLK1 屬於低速的匯流排時鐘,最高為 45M,片上低速的外設就掛載到這條匯流排上,比如USART2/3/4/5、SPI2/3,I2C1/2 等。至於 APB1 匯流排上的外設的時鐘設定為多少,得等到我們使用該外設的時候才設定 HCLK1 的最大值為45M。
總結
寫的都是比較基礎的內容,主要適合剛接觸429的萌新看(主要我也是萌新),注意很多參考資料上都407的時鐘搬過來當作429的時鐘樹,407的SYSCLK最大時168M,看資料的時候先看看最大時鐘是不是180M之後再決定是否繼續看。
相關文章
- Linux系統——架構淺析Linux架構
- 系統時鐘與硬體時鐘
- Linux系統呼叫機制淺析Linux
- [微控制器]時鐘週期
- 實時時鐘、系統時鐘和主機伺服器時鐘的區別伺服器
- [分散式]分散式計算系統淺析分散式
- Linux作業系統記憶體淺析Linux作業系統記憶體
- 一致性協議淺析:從邏輯時鐘到Raft協議Raft
- 分散式系統2:分散式系統中的時鐘分散式
- 分散式系統:向量時鐘分散式
- 深入淺析Nodejs的安裝方法與模組系統NodeJS
- 淺析《先驅者》出色的難度系統設計
- 宜信支付結算賬戶系統淺析
- 淺析智慧化指揮資訊系統發展
- 醫院GPS時鐘系統(子母鐘系統)構成與行業應用行業
- 10. 實時鐘系統設計
- 分散式系統:Lamport邏輯時鐘分散式LAMP
- 基於組合語言微控制器的時鐘設計組合語言
- 淺析大資料時代的資料安全合規體系建設大資料
- Win10系統怎麼備份鬧鐘和時鐘Win10
- STM32F207時鐘系統解析
- 北斗授時伺服器(時鐘系統)在政務系統應用方案伺服器
- GPS北斗時鐘伺服器(衛星時鐘系統)讓高考時間更加精準伺服器
- 淺析Bluehost美國主機Linux與Windows系統選擇LinuxWindows
- 淺析六西格瑪與ERP質量子系統整合分析
- iOS Block淺淺析iOSBloC
- 分散式系統的硬核:時間時鐘問題和演算法分散式演算法
- 論醫院架設NTP時鐘裝置(GPS北斗時鐘系統)重要性
- RunLoop 淺析OOP
- 淺析 ReentrantLockReentrantLock
- Unstated淺析
- 淺析SharedPreferences
- Nginx淺析Nginx
- 淺析PromisePromise
- ejs 淺析JS
- 淺析KubernetesStatefulSet
- AIDL淺析AI
- MongoDB淺析MongoDB