【STM32】STM32f4学习之路--时钟
文章目錄
初學STM32,發現他的時鐘系統有點復雜(相對于之前學的51單片機來說)。這是為什么?
–51單片機的I/O口少,外設簡單,所以時鐘一般來說都是固定的,這也導致了51單片機應用場景的局限性。
–stm32單片機之所以時鐘系統的復雜,這與它芯片本身應用的場景有關,我們知道,32一般都是多引腳且外設多,應用場合也十分廣泛,例如一些低功耗、高頻率的場合,這些無疑都是得益于他的時鐘系統。
##1-STM32的時鐘來源
stm32總共擁有5個時鐘源:
①HSE,high-speed-extern(高速外部時鐘)
②HSI,high-speed-inside(高速內部時鐘)
③LSE,low-speed-extern(低速外部時鐘)
④LSI,low-speed-inside(低速內部時鐘)
⑤PLL,鎖相環倍頻輸出時鐘
HSE:外部晶振/陶瓷諧振器、精度高。ST官方推薦的外部晶振是8M,如果外接其他類型的晶振,須在stm32f4xx.h程序中修改宏,以及在system_stm32f4xx.c修改PLL
HSI:內部16MRC振蕩器,啟動速度比HSE快,但精度不及HSE。
LSE:外部晶振/陶瓷諧振器,一般用于實時時鐘(RTC)的時鐘源,功耗低且精度高。
LSI:內部32KHz振蕩器,可作為停機/待機、獨立看門狗、自動喚醒單元的時鐘源。
PLL:分為主PLL和專用PLL。主PLL由HSE或HSI提供時鐘信號,并輸出兩時鐘(1個用于系統時鐘168M,1個用于USB OTG FS時鐘48M、隨機數發生器<=48M、SDIO時鐘<=48M);專用PLL與主PLL有相同的輸入時鐘,但其有專門的使能禁止和分頻系數,為I2S提供時鐘。
下面是stm32的時鐘樹,圖片太大,我們分開來看。
##2-各個功能的時鐘來源
###看門狗與RTC時鐘
stm32內部的低速時鐘(32KHz)可作為獨立看門狗與RTC的時鐘源,同時可以看到,RTC的時鐘源有3個,另外的兩個分別是LSE(32.768KHz)、(分頻2-31)后的HSE。
###微控制器時鐘輸出MCO
MCO1有4個時鐘來源:HSE、HSI、PLL、LSE
MCO2有4個時鐘來源:HSE、PLL、PLL2S、SYSCLK
MCO輸出時鐘不得超過100MHz(最大I/O速度)
###系統與外設時鐘
重點來了,敲黑板!
系統時鐘SYSCLK經過分頻(1-512)后供給外設使用,其時鐘來源包括:HSE、HSI、主PLL
通常我們所說的168MHz其實的來源是:HSE外接8M晶振,經過8分頻(/M,M系數為8),然后經過336倍頻(N,N為336),在經過2分頻(/P,P為2)后,即*(8/8)336/2=168M*
系統主時鐘SYSCLK可直接為以太網PTP提供時鐘, 也可經過分頻(1-512)供給HCLK、AHB總線、內核、存儲器、DMA,或者8分頻后供給Cortex 系統定時器Systick;SYSCLK在經過AHB(一般不分頻,保持168M)分頻后再分頻為APB1(4分頻,因為APB1頻率不得超過42M)和APB2(一般2分頻,最大不得超過84M)提供時鐘。APB1和APB2 各自掛載不同的外設,詳細請看datasheet。
ST官方推薦的stm32外部晶振是8M,這樣子的話,通常我們只需調用庫函數system_stm32f4xx.c中的**void SystemInit(void)**函數即可進行時鐘的配置,默認是168M系統時鐘,APB1為42M,APB2為84M,如需要可自行修改。
##3-后記
PS:這里剛開始有個疑問為什么TIM14(掛載在APB1)能達到84MHz,,看了時鐘樹之后才發現,定時器時鐘做了另外的處理的,記錄下;
從STM32F4的內部時鐘樹可知,當APB1和APB2分頻數為1的時候,TIM1、TIM8TIM11的時鐘為APB2的時鐘,TIM2TIM7、TIM12TIM14的時鐘為APB1的時鐘;而如果APB1和APB2分頻數不為1,那么TIM1、TIM8TIM11的時鐘為APB2的時鐘的兩倍,TIM2TIM7、TIM12TIM14的時鐘為APB1的時鐘的兩倍。
因為系統初始化SystemInit函數里初始化APB1總線時鐘為4分頻即42M,APB2總線時鐘為2分頻即84M,所以TIM1、TIM8TIM11的時鐘為APB2時鐘的兩倍即168M,TIM2TIM7、TIM12~TIM14的時鐘為APB1的時鐘的兩倍即84M。
另外,TIM_ClockDivision是在采樣時使用的時鐘分頻器,比如輸入捕獲時的采樣時鐘或計算互補輸出的死區的時鐘;時鐘分頻就一個PSC,還有一個重裝載計數值ARR,一般只有設置這兩個就夠了,TIM_ClockDivision在輸入捕獲和PWM的互補輸出時設置才有意義!
總結
以上是生活随笔為你收集整理的【STM32】STM32f4学习之路--时钟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C language】C语言感悟之co
- 下一篇: 【STM32】STM32f4学习之路--