STM32 時鐘樹
阿新 • • 發佈:2018-12-17
在我之前的文章中講到了時鐘的使能,我們通過檢視系統的框架圖,找到了AHB系統匯流排,在圖中可以知道其為168MHz。那這168MHz是怎麼來的呢,STM32中的時鐘結構是怎樣的呢?時鐘的問題是一個很基礎的問題,是學習一款微控制器的核心,我們可以通過參考手冊看看STM32的時鐘樹是怎樣的。
在初始UART中我們使能了APB2,在上圖中我們在左側找到了APBx外設時鐘,那麼這個時鐘源是怎麼個回事呢?
stm32有5個時鐘源分別是:高速內部時鐘(HSI),低速內部時鐘(LSI),高速外部時鐘(HSE),低速內部時鐘(LSE)和鎖相環倍頻輸出(PLL)。
而我們的系統時鐘能達到168MHz是怎麼來的呢,根據上圖,最大的HSE只達到了26MHz,所以我們使用的PLL來實現168MHz的。
在圖裡的第五塊部分:
N表示倍頻係數(取值範圍:64~432),P表示系統時鐘的主PLL分頻係數(取值範圍:2、4、6、8)
Q表示USB/SDIO/隨機數產生器等主PLL分頻係數(PLL之後的分頻),取值範圍:2~15。
R暫時用不上。
我們通常編寫程式碼是會遇到
void Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq)
Stm32_Clock_Init(336,8,2,7);//設定時鐘168MHz;
外部晶振偉8MHz時,推薦使用N=336,M=8,P=2
得到Fvco =8*(336/8)=336MHz
Fsys=Fvco/2=168MHz
Fusb=Fvco/7=48MHz
通過SW選擇SYSCLK=PLLCLK,即可得到168MHz的系統執行頻率。繼續通過分頻就可得到相應的時鐘頻率了。