Ⅰ、概述
對於系統時鍾應該都知道它的作用,就是驅動整個芯片工作的心臟,如果沒有了它,就等於人沒有了心跳。
對於使用開發板學習的朋友來說,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 時鍾源,並配置分頻系數 M、 N、 P 和 Q)。
PLLI2S 使用與 PLL 相同的輸入時鍾( PLLM[5:0] 和 PLLSRC 位為兩個 PLL 所共用)。但是, PLLI2S 具有專門的使能/禁止和分頻系數( N 和 R)配置位。在 PLLI2S 使能后,配置參數便不能更改。
Ⅲ、代碼分析
以STM32F4x5、x7系列芯片為例來分析一下系統時鍾的配置。
參考軟件工程:
https://yunpan.cn/cRepWDShSK4yc 訪問密碼 65b1
1.倍頻參數
結合上面時鍾樹和源代碼可以看得出來,系統時鍾PLLCLK的計算主要是配置PLL_M、PLL_N、PLL_P這三個參數,最后168M是通過分頻、倍頻得出來的。
2.驗證時鍾頻率
對於STM32芯片來說,驗證系統時鍾最終運行多大的速度,最准確的驗證方法的用示波器測試它的系統時鍾。
這里描述一下怎樣用示波器來測試系統時鍾。其實很簡單,就是在軟件代碼里面配置時鍾輸出(這里可以輸出多種類型的時鍾HSE、HSI、PLLCLK等),根據代碼配置不同,相應輸出的時鍾就不同。請看源代碼:
我提供的代碼里面就有這一選項,將定義配置為1,就打開了這個功能。時鍾輸出的參數有兩個,時鍾源,分頻值。注意:這里的最大輸出時鍾是100M,所以PLLCLK時鍾分頻之后才能輸出,不然你用示波器檢測不到波形(我測試過了)。
最后輸出的波形如圖:
Ⅳ、說明
關於STM32的開發,軟件兼容性是很好的,不要覺得你的芯片和我總結的實例有差異就不看了,其實是錯誤的認識,特別是同一個系列的芯片基本上程序都兼容,也就是可以互相使用。
以上總結僅供參考,若有不對之處,敬請諒解。
Ⅴ、最后
關注微信,回復“更多內容”,將獲得更多內容(如:UCOS實例等,不斷更新中......)。
如果你喜歡我分享的內容,你又想了解更多相關內容,請關注文章開頭的微信公眾號,新內容持續更新中,后期將會有更多精彩內容出現。