STM32F4_RCC系統時鍾配置及描述


、概述

對於系統時鍾應該都知道它的作用,就是驅動整個芯片工作的心臟,如果沒有了它,就等於人沒有了心跳。

對於使用開發板學習的朋友來說,RCC系統時鍾這一塊知識估計沒怎么去配置過,原因在於開發板提供的晶振基本上都是官方標准的時鍾頻率,使用官方的標准庫,這樣系統時鍾就是默認的配置,也就是默認的頻率。但對於自己設計開發板,或者想要改變系統時鍾頻率(如:降低功耗就需要降頻)的朋友來說,配置系統時鍾就有必要了。

關於時鍾這一塊對定時器(TIM、RTC、WDG等)相關的外設也比較重要,因為要求精准,就需要時鍾頻率精准。

該文將描述關於系統時鍾配置及注意的相關事項,更多詳情內容,請往下看。

 

本着免費分享的原則,方便大家手機學習知識,定期在微信平台分享技術知識。如果你覺得分享的內容對你有用,又想了解更多相關的文章,請用微信搜索“EmbeddDeveloper” 或者掃描下面二維碼、關注,將有更多精彩內容等着你。

 

 

Ⅱ、關於時鍾

1.時鍾分類

STM32芯片(所有型號)的時鍾包含4類:

HSE(High Speed External)高速外部時鍾

HSI(High Speed Internal)高速內部時鍾

LSE(Low  Speed External)低速外部時鍾

LSI(Low  Speed Internal)低速內部時鍾

 

2.時鍾源

STM32芯片(所有型號)驅動系統時鍾的時鍾源:

HSI 內部高速時鍾

HSE 外部高速時鍾

PLLCLK倍頻時鍾

 

STM32具有以下兩個次級時鍾源:

32 kHz 低速內部 RC (LSI RC),該 RC 用於驅動獨立看門狗,也可選擇提供給 RTC 用於停機/待機模式下的自動喚醒。

32.768 kHz 低速外部晶振( LSE 晶振),用於驅動 RTC 時鍾 (RTCCLK)。對於每個時鍾源來說,在未使用時都可單獨打開或者關閉,以降低功耗。

 

3.時鍾樹(框圖)

關於STM32的時鍾樹針對不同系列芯片可能存在差異。F0、F1和F3系列芯片(主流芯片,頻率相對較低)有很多相似的地方,F2和F4(高性能芯片)系列芯片有很多相似的地方。但是,F3芯片和F4芯片的時鍾樹之間卻存在很大差異,具體請看參考手冊RCC相關章節。

STM32時鍾控制器為應用帶來了高度的靈活性,用戶在運行內核和外設時可選擇使用外部晶振或者使用振盪器,既可采用最高的頻率,也可為以太網、 USB OTG FS 以及 HS、 I2S 和 SDIO等需要特定時鍾的外設保證合適的頻率。

以F417芯片為例:可通過多個預分頻器配置 AHB 頻率、高速 APB (APB2) 和低速 APB (APB1)。 AHB 域的最大頻率為 168 MHz。高速 APB2 域的最大允許頻率為 84 MHz。低速 APB1 域的最大允許頻率為 42 MHz。實際上輸出的最大時鍾可以適當提高一點,但為了保證在多種環境下,最好還是不要超過標准的最大值。

 

STM32F4xx 器件具有兩個 PLL

PLL (PLL) HSE HSI 振盪器提供時鍾信號,並具有兩個不同的輸出時鍾:

第一個輸出用於生成高速系統時鍾(最高達 168 MHz

第二個輸出用於生成 USB OTG FS 的時鍾 (48 MHz)、隨機數發生器的時鍾

 

專用 PLL (PLLI2S) 用於生成精確時鍾,從而在 I2S 接口實現高品質音頻性能。

由於在 PLL 使能后主 PLL 配置參數便不可更改,所以建議先對 PLL 進行配置,然后再使能(選擇 HSI HSE 振盪器作為 PLL 時鍾源,並配置分頻系數 MNP Q)。

PLLI2S 使用與 PLL 相同的輸入時鍾( PLLM[5:0] PLLSRC 位為兩個 PLL 所共用)。但是, PLLI2S 具有專門的使能/禁止和分頻系數( N R)配置位。在 PLLI2S 使能后,配置參數便不能更改。

 

Ⅲ、代碼分析

以STM32F4x5、x7系列芯片為例來分析一下系統時鍾的配置。

參考軟件工程:

https://yunpan.cn/cRepWDShSK4yc  訪問密碼 65b1

 

1.倍頻參數

結合上面時鍾樹和源代碼可以看得出來,系統時鍾PLLCLK的計算主要是配置PLL_MPLL_NPLL_P這三個參數,最后168M是通過分頻、倍頻得出來的。

 

2.驗證時鍾頻率

對於STM32芯片來說,驗證系統時鍾最終運行多大的速度,最准確的驗證方法的用示波器測試它的系統時鍾。

這里描述一下怎樣用示波器來測試系統時鍾。其實很簡單,就是在軟件代碼里面配置時鍾輸出(這里可以輸出多種類型的時鍾HSE、HSI、PLLCLK等),根據代碼配置不同,相應輸出的時鍾就不同。請看源代碼:

我提供的代碼里面就有這一選項,將定義配置為1,就打開了這個功能。時鍾輸出的參數有兩個,時鍾源,分頻值。注意:這里的最大輸出時鍾是100M,所以PLLCLK時鍾分頻之后才能輸出,不然你用示波器檢測不到波形(我測試過了)。

最后輸出的波形如圖:

 

、說明

關於STM32的開發,軟件兼容性是很好的,不要覺得你的芯片和我總結的實例有差異就不看了,其實是錯誤的認識,特別是同一個系列的芯片基本上程序都兼容,也就是可以互相使用。

以上總結僅供參考,若有不對之處,敬請諒解。

 

Ⅴ、最后

關注微信,回復“更多內容”,將獲得更多內容(如:UCOS實例等,不斷更新中......)。

如果你喜歡我分享的內容,你又想了解更多相關內容,請關注文章開頭的微信公眾號,新內容持續更新中,后期將會有更多精彩內容出現。

 


免責聲明!

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



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