01 時鐘系統
1.1 時鐘系統的作用
Stm32芯片中有大量的電路模塊,時鐘系統提供一個頻率信號為電路模塊提供統一的節拍,使電路模塊能有序工作,最終達到控制電路的目的。
圖1.1 晶振頻率圖
1.2 時鐘周期的關系
時鐘:為Stm32提供統一的節拍,形象的稱時鐘是單片機的心臟。
時鐘周期:又名振蕩周期,一個高低電平(0或1)所需要的時間。
指令周期:CPU從存儲器中取出并執行一條指令所需的全部時間(取指、譯碼與執行三部分時間)。
機器周期:執行一個動作的時間周期,如取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。
圖1.2 指令周期圖
02 Stm32的時鐘源
2.1 Stm32時鐘樹
由外部晶體振蕩器提供時鐘輸入,最終轉換為多個外部設備的周期性運作。這種時鐘“能量”的傳遞路徑猶如大樹的養分由主干流向分支,因此稱為時鐘樹。理解系統時鐘的大小如何獲得(分頻與倍頻),其他外設的時鐘又如何劃分,可以通過一張時鐘樹圖找到答案,只要理解好時鐘樹,Stm32一切時鐘的來龍去脈就會非常清楚。
圖2.1 Stm32時鐘樹圖
2.2 時鐘源的分類
Stm32有兩類時鐘源,一種是以晶振的內置與外置來分別,另一種以時鐘的速度來區分,并由此分為如下四種類型。
圖2.2 時鐘源分類圖
2.2.1 內置低速時鐘LSI
從內部RC振蕩器產生,頻率為40khz,也是主要提供給實時時鐘模塊,同時LSI時鐘擔當一個低功耗時鐘源,為獨立看門狗和自動喚醒單元提供時鐘,它可以在停機和待機模式下保持運行。
圖2.3 內置低速時鐘LSI
2.2.2 外置低速時鐘LSE
以低速外部晶振(低速外部石英晶體或陶瓷諧振器)作為時鐘源,主要是提供給實時時鐘模塊或者為其他定時功能提供一個低功耗且精確的時鐘源(RTC時鐘源),所以一般選用32.768khz的石英晶振,該頻率下定時器方便取整。
圖2.4 外置低速時鐘LSE
2.2.3 高速內部時鐘HSI
以內部RC振蕩器產生,頻率為8Mhz,優點是成本低且啟動速度快,但相較于外部時鐘不穩定,精度較差。如果HSE晶體振蕩器失效,HSI時鐘會被作為備用時鐘源。
圖2.5 高速內部時鐘HSI
2.2.4 外置高速時鐘HSE
以外部晶振作為時鐘源,晶振頻率可取范圍為4~16Mhz,一般采用8Mhz的晶振,為系統提供更為精確的主時鐘。
圖2.6 外置高速時鐘HSE
03 HSE、HSI和PLL的使能
3.1 系統時鐘源的使能
Stm32的時鐘源主要有: 內部時鐘、外部時鐘、鎖相環倍頻輸出時鐘。內部時鐘、外部時鐘又分為高速時鐘、低速時鐘。系統時鐘源sysclk的時鐘由HSE、HSI、PLL三個時鐘提供,具體在RCC_CFGR寄存器中配置。
圖3.1 系統時鐘源的使能
PLL鎖相環倍頻輸出時鐘又主PLL時鐘、PLLI2S時鐘。PLL時鐘來源可以有兩個:一個是HSE,另一個是HSI/2。由時鐘配置寄存器CFGR的位16,即PLLSRC設置具體用哪個。HSI是內部高速的時鐘信號,頻率為8MHz,這里我們選擇HSE作為PLL的時鐘來源。
3.2 系統時鐘的設置步驟
(1) 開機后,先讓系統啟動起來,由于HSI的啟動速度快,所以先啟動內部HSI待系統穩定后再切高速時鐘源。
(2) 系統啟動后,切換系統時鐘的時鐘源為HSE。切換時要注意,先關閉時鐘相關的中斷,防止中斷破壞時鐘源的切換。
(3) 設置HSE的信號源,外部晶振不旁路,然后開啟HSE,并等待HSE穩定;HSE穩定后,配置Stm32工作于高性能模式下,配置PWR_CR寄存器。
(4) 配置AHB、APB1和APB2的分頻系數;配置PLL的分頻、倍頻系數,然后開啟PLL,等待PLL輸出穩定。
(5) 配置指令預取、指令cache、數據cache等使能;選擇主PLL為系統時鐘,并等待其穩定。
04 鎖相環PLL的內部結構
4.1 鎖相環內部結構
PLL是鎖相環,用于倍頻輸出,因為開發板外部高速晶振也只有8M,如果要使芯片的最大時鐘頻率是72M,可通過PLL鎖相環來倍頻。它是由HSL或者HSI驅動產生的一個時鐘,先經過分頻器M,再經過倍頻器N,再經過分頻器P出來,形成PLL時鐘源,供給外設或者系統時鐘使用的。
圖4.1 PLL的時鐘結構圖
圖4.2 鎖相環原理圖
PLL計算公式 : x=f / m * n / p;
x為PLL頻率,f為輸入時鐘源(HSL、HSI)時鐘頻率,m、p為分頻器,n為倍頻器。
05 眾多時鐘的分配
5.1 時鐘的分配
因為Stm32的外設繁多,外設的運作所需要的最佳時鐘各不相同,如果所有時鐘同時運行會給MCU帶來極大的負載,所以Stm32采取的時鐘管理方式是——隨用隨開。
圖5.1 時鐘分配原理圖
(1) 送給AHB總線(Advanced Hight Bus高級高性能總線)如內核、內存和DMA使用的HCLK時鐘。
(2) Systick時鐘
8分頻后給Stm32的系統定時器作為時鐘源。
(3) CPU主頻
給Cortex的自由運行時鐘FCLK,用來采樣中斷和為調試模塊計時。
(4) 送給APB1(Advanced Peripheral Bus先進外設低速總線)低速預分頻器APB1。
(5) 送給APB2(Advanced Peripheral Bus先進外設高速總線)高速預分頻器APB2。
圖5.2 AHB的時鐘結構
5.2 最終時鐘外設分配
最開始的節拍通過圖5.1的時鐘流程走下來,經歷了一系列的分頻和倍頻,得到了幾個與我們開發密切相關的時鐘。
(1) SYSCLK:系統時鐘,是Stm32大部分器件的時鐘來源,主要由AHB預分頻器分配到各個部件。
(2) HCLK:由AHB預分頻器直接輸出得到,它是高速總線AHB的時鐘信號,提供給存儲器,DMA及Cortex內核,是Cortex內核運行的時鐘,CPU主頻就是這個信號。
(3) FCLK:由AHB輸出得到,是內核的“自由運行時鐘”?!白杂伞北憩F在它不來自時鐘HCLK。因此在HCLK停止時FCLK也可以繼續運行,也就是說,即使CPU休眠了,也能夠采樣到外部中斷和跟蹤休眠事件,低功耗模式下使用。
(4) PCLK1:外設時鐘,由APB1分頻得到,最大可為72Mhz,提供給APB1總線上的外設使用。
(5) PCLK2:外設時鐘,由APB2預分頻輸出得到,最大為72Mhz,提供給APB2總線上的外設。
06 APB1和APB2總線上掛接的模塊
6 APB1和APB2總線上掛接的模塊
總線是嵌入式系統主機部件之間傳送信息的公用通道,物理上對應一組組導線(地址總線,數據總線,控制總線),CPU、內存、輸入輸出、各種外設之間的比特信息都在這些總線上傳輸,Stm32微處理器的總線有兩類,分別是AHB和APB。
AHB先進高性能總線是一種系統總線,主要用于高性能模塊(如CPU、D MA和DSP等)之間的連接。AHB系統由主模塊、從模塊和基礎結構3部分組成,整個AHB總線上的傳輸都由主模塊發出,由從模塊回應。
APB是先進外設總線,是一種外圍總線,APB主要用于低帶寬的周邊外設之間的連接,如USART串口、IO、AD/DA等不需要很高的時鐘頻率的外設,因此功耗就比較低。
07 應用場景
7 應用場景
調節 CPU 的運行頻率,來控制系統的性能與功耗。比較典型的例子就是說手機/筆記本電腦都有高性能模式、平衡模式、低性能模式。
圖7.1 Android的性能模式
圖7.2 Apple的性能模式
08 總結展望
8 總結
當我們在拿到一款新的芯片時,查看它的時鐘框圖,可以獲取一些信息,為后面的應用芯片準備:
(1) 了解單片機的時鐘系統的時鐘源,及時鐘頻率為多少
(2) 觀察系統時鐘Sysclk由哪幾個時鐘源驅動
(3) 最后觀察時鐘樹圖了解外設分別掛在哪個時鐘線或者時鐘源上
評論
查看更多