STM32F4再探-1.時鐘系統
在算已經入門了STM32之後(其實也不算入門了,只是會使用STM32的各種外設,會GPIO,會複用,能使用SPI,串列埠,會輸出PWM,會定時器,剛剛實現一個無線通訊控制步進電機按照一定流程運動,下一步打算移植UCOSIII到板子中),在這之前覺著好像僅僅只是會使用STM32,能看得懂例程,但是對於一些原理性的東西好像很模糊,覺著要重新學習一遍STM32F4,然後搞明白以前很模糊的一些概念和原理。
首先要搞清楚的是時鐘系統。上圖
STM32的外設很多,並不是所有的外設都需要像系統時鐘那麼高的頻率,RTC+看門狗只需要幾十K即可。頻率越高,功耗越大,抗電磁干擾能力越弱,所以在STM32中不像51只有一個時鐘源。
STM32F4中有5個最重要的時鐘源:
HSI-高速內部時鐘(RC振盪器產生,16M,可作為系統時鐘)
HSE-高速外部時鐘(外部晶振,一般用8M晶振)
LSI-低速內部時鐘(RC振盪器產生,32kHz左右,供看門狗和自動喚醒單元使用)
LSE-低速外部時鐘(32.768kHz外部晶振,主要為RTC時鐘源)
PLL-鎖相環倍頻輸出(分為主PLL和專用PLL)
PLL的來源其實是HSI或者HSE。
主PLL(PLL):具有兩個不同的輸出時鐘(PLLP,PLLQ)。
PLLP用於生成高速系統時鐘(SYSCLK,最高168MHz)
PLLQ用於成成USB OTG FS的時鐘(48MHz),
專用PLL(PLLI2S):在I2S介面實現高品質音訊。
PLLP->SYSCLK 計算系統頻率的方法:
(eg. 外部晶振8M 分頻係數M=8 倍頻係數N=336 分頻係數P=2)
則: PLLP=8MHz * N / (M * P) = 168MHz
系統時鐘為PTP(乙太網時鐘),AHB,APB1,APB2作為時鐘源。
注意:PTP使用系統時鐘頻率,AHB,APB1,APB2都是經過分頻之後的時鐘。
AHB最高168MHz APB2最高84MHz APB1最高42MHz
最後總結一下SystemInit()函式中設定的系統時鐘的大小:
SYSCLK(系統時鐘):168MHz
AHB(HCLK=SYSCLK):168MHz
APB1(PCLK1=SYSCLK/4):42MHz
APB2(PCLK2=SYSCLK/2):84MHz
PLL主時鐘:168MHz