STM32時鐘系統總結

從51轉型到stm32,在前面的GPIO的輸入輸出讀取找到規律就能理解和使用,可以看到stm32中的所有操作無非是操作寄存器來實現的,這也是有51單片機基礎的我慢慢意識到的,而且我也深刻理解,要想玩轉stm32,就需要對時鐘系統、定時器系統、中斷系統有一個清晰的認識,在學51的時候並沒有深入去理解它,但在stm32中明顯他們成了更復雜的系統,所以必須要重點理解了。

這裏我想用我的思路來整理在學習STM32的時鐘系統時的知識點。

一、首先先介紹STM32的時鐘源:

STM32裏的時鐘源主要有兩種分類:內部時鐘/外部時鐘,高速/低速。
其中內部時鐘都是由RC震盪電路產生的方波,主要特性就是不穩定,所以一般不會採用內部時鐘作爲時鐘源,更多的是將其作爲一個替補時鐘源。

  • HSI(high speed inter):高速內部時鐘,具有8M(8000000)的頻率。
  • LSI(low speed inter):低速內部時鐘,具有40K(40000)的頻率。
  • HSE(low speed extern):高速外部時鐘,可接4~16M(4000000~16000000)的頻率晶振。
  • LSE(low speed extern):低速外部時鐘,接32.768kHz(32768)的頻率。

在這裏插入圖片描述

二、需要配置的時鐘

在左圖中一共要配置兩個重要時鐘,SYSCLK系統時鐘,以及RTCCLK實時時鐘。

  • SYSCLK系統時鐘:經過分頻和分路,爲各個總線和各個部件提供頻率。
    這個時鐘有什麼用呢,首先在stm32中如果一個部件沒有提供頻率,那麼它是不工作的,需要先設定好頻率分好週期,規定了這個部件每個週期需要做一個工作,那麼他就會按照規定好的頻率每個週期進行一次操作,就相當於一個人喊口號,其他人聽口號工作。
    而爲了降低部件的功耗,可能就需要它的工作效率低一些,這裏就需要進行分頻了,所以在系統時鐘之後還有若干個總線,根據需求進行分頻,使得配置出多個不同頻率的時鐘總線來滿足需求。

  • RTC實時時鐘:實時時鐘本質是一個定時器
    單片機進行計時時使用,比如stm32中需要定時1秒,這就需要實時時鐘進行定時完成,不同於系統時鐘面向內部所有部件對所有部件進行分配週期,定時器更多的是面向現實世界,實現定時1毫秒這種面向我們現實的時間。

三、時鐘的配置

這一步講述時鐘該如何配置,是怎麼最終確定SYSCLK和RTCCLK兩個時鐘系統的頻率的。
根據一二步,可以看到我們需要的肯定是一個精準的定時系統,像是內部的HSI和LSI都是不滿足我們需求的時鐘源,所以正常來說我們都是使用HSELSE作爲時鐘源的。但是當這兩個無法使用的時候就需要內部時鐘源上場了,在系統時鐘配置時有個叫做CSS的檢測裝置,如果發現外部時鐘HSE失效,則自動啓用內部時鐘HSI,保證系統時鐘一定進行工作。

接着爲了具體需求,我們要爲SYSCLK設置一個頻率,這個頻率通過多種來源,可以是HSI,可以是HSE,而中間還有一個PLL倍頻器,對頻率進行放大的一個元件,通過它時鐘源的頻率進行放大後提供給SYSCLK,可以設置最大x16,但是最高的頻率是72MHz。
所以SYSCLK的頻率來源一共有3個:

  1. HSI直接提供
  2. HSE直接提供
  3. HSI÷2或者HSE或者HSE÷2經過PLL最大16倍的放大產生的頻率(最大72Mhz)

RTC實時時鐘一般就由外部晶振來提供了:

  • 需要一提的是LSE的頻率一般是32.768kHz,32768Hz=215即分頻15次後爲1Hz,週期=1s,經過工程師的經驗總結32768Hz,時鐘最準確,並且規範統一。所以多采用這種頻率的外部晶振作爲RTC的時鐘源。

四、總線的配置

看到這個圖的右邊,有大量的分頻器,用於根據實際需要對系統時鐘進行劃分,其中與系統時鐘相連的數據總線和系統總線AHBSRAMDMA單元直接與其連接,並且掛着許多獨立分頻器以輸出不同的頻率;AHB上又連接着兩條先進設備總線APB,APB下也有多條分支和分頻器。這樣AHB與APB再與下面掛着的分頻器共同組成了總線矩陣,給不同的部件提供可自定義的頻率:

  1. AHB與SYSTEM時鐘直接相連,不經過任何分頻,可以達到和系統時鐘最高值一樣的頻率72Mhz。
  2. AHB經過分頻器分爲分頻並分爲幾條線其中一條引向APB2總線,最高頻率爲72Mhz,我們之前有多次用到的RCC->APB2ENR寄存器使能IO口就是將這個分頻後的頻率提供給了IO口使其工作,總線2還可以再經過一個分頻器分頻給定時器1提供頻率,或者另一條分支經過分頻器分頻給ADC時鐘。
  3. 還有一條線引向APB1分配器,和APB2差不多吧,只是最高頻率爲36Mhz,然後還可以繼續分頻後給各個通用定時器頻率。

五、總結

stm32時鐘可以大致分爲兩個部分,對應圖片的左邊和右邊:

  1. 選擇時鐘源: SYSTEM時鐘一般選擇更穩定的外部時鐘源,根據功耗需求確定HSE頻率和PLL倍頻係數,給系統時鐘提供合適的頻率;
    RTC時鐘一般選擇定時更準確、更穩定的時鐘源,32.768KHz是一般選擇。
  2. 總線分頻: SYSTEM時鐘的頻率經過多個總線和分頻器給不同的部件提供頻率,因爲各個部件功耗需求各不相同,就需要經過合理的配置,以達到最優解。

TIPS:

  1. 各個部件如果不提供時鐘則不會進行工作,所以每次我們初始化IO口的時候都會通過寄存器使能總線時,比如APB2爲該IO口提供頻率就要配置寄存器的相應的位。
  2. 一般我們系統時鐘設置爲72MHz,當我們要考慮到整個系統的功耗問題時,則需要通過分頻器對各個總線分配合適的頻率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章