Ⅰ、概述
對于系統時鐘應該都知道它的作用,就是驅動整個芯片工作的心臟,如果沒有了它,就等于人沒有了心跳。
對于使用開發板學習的朋友來說,RCC系統時鐘這一塊知識估計沒怎么去配置過,原因在于開發板提供的晶振基本都是官方標準的時鐘頻率,使用官方的標準庫,這樣系統時鐘就是默認的配置,也就是默認的頻率。但對于自己設計開發板,或者想要改變系統時鐘頻率(如:降低功耗就需要降頻)的朋友來說,配置系統時鐘就有必要了。
關于時鐘這一塊對定時器(TIM、RTC、WDG等)相關的外設也比較重要,因為要求精準,就需要時鐘頻率精準。
Ⅱ、關于時鐘
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的開發,軟件兼容性是很好的,不要覺得你的芯片和我總結的實例有差異就不看了,其實是錯誤的認識,特別是同一個系列的芯片基本上程序都兼容,也就是可以互相使用。
-
RCC
+關注
關注
0文章
95瀏覽量
27404 -
Tim
+關注
關注
0文章
84瀏覽量
18238 -
STM32F4
+關注
關注
3文章
196瀏覽量
28831
發布評論請先 登錄
STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊
白話理解RCC時鐘樹(可下載)
求助大佬我使用STM32F030F4P6 的PA3引腳輸出PWM波形
stm32f401rct6寄存器配置HSE PLL作為系統時鐘,系統鎖死怎么解決?
STM32G473 DRDY為什么不置位?
stm32f4 sdio時鐘如何獲取通過什么函數?
stm32f407這個STM32_RCC_PERIPHCLK_SDMMC是哪里定義的?
STM32U5退出LPBAM后,重新配置時鐘發現MSIK時鐘和配置不一致是怎么回事?
基于STM32F4的集中潤滑系統的設計

STM32項目實戰:基于STM32F4的智能燈光控制系統(LVGL),附項目教程/源碼

AT32講堂088 | 雅特力AT32F402/F405時鐘配置

【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx 系

評論