STM32F429微控制器的時鐘系統淺析

五好市民金閃閃發表於2020-11-13

先把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之後再決定是否繼續看。

附上參考手冊下載連結:
https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405415-stm32f407417-stm32f427437-and-stm32f429439-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

相關文章