01
時(shí)鐘系統(tǒng)介紹
▲時(shí)鐘系統(tǒng)專業(yè)名詞縮寫(xiě)
時(shí)鐘系統(tǒng)關(guān)鍵組成部分
01
內(nèi)部高速時(shí)鐘(HSI)
HSI時(shí)鐘信號(hào)可以通過(guò)內(nèi)部16MHZ的RC振蕩器產(chǎn)生,可以直接用于系統(tǒng)時(shí)鐘或者用于PLL輸入。
HSI的RC振蕩器的優(yōu)勢(shì)是: 在最小成本(沒(méi)有外部器件)情況下提供一個(gè)時(shí)鐘源。它的啟動(dòng)速度要比HSE晶體振蕩器更快,但是即使校準(zhǔn)頻率后,它的精度仍然小于外部晶體振蕩器或陶瓷諧振器。
02
外部高速時(shí)鐘(HSE)
外部高速時(shí)鐘信息(HSE)可以通過(guò)兩個(gè)時(shí)鐘源產(chǎn)生:
① 外部晶體/陶瓷諧振器
② 外部用戶時(shí)鐘
▲兩種時(shí)鐘源接入示意圖
03
主鎖相環(huán)時(shí)鐘(PLL)
STM32F2xx具有兩個(gè)PLL
① 主要的PLL通過(guò)HSE或HSI提供時(shí)鐘,并且有兩個(gè)輸出時(shí)鐘;
② 專用的PLL(PLLI2S)被用于產(chǎn)生一個(gè)精確的時(shí)鐘去實(shí)現(xiàn)高質(zhì)量音頻效果在I2S接口;
HSE/M*N/P得到PLL時(shí)鐘
關(guān)于PLL鎖相環(huán)說(shuō)明
從1處輸入,3處輸出是1的N倍。
3處除以N又作為輸入,當(dāng)1和2的頻率一樣,就鎖定了。(之所以圖上是xN,因?yàn)閺?看向3的)
04
低速外部時(shí)鐘(LSE)
LSE是一個(gè)32.768KHZ低速外部晶振或陶瓷諧振器。
它的優(yōu)點(diǎn):提供低速但是高精度時(shí)鐘給RTC外設(shè),為時(shí)鐘/日歷或其他時(shí)間應(yīng)用。
05
低速內(nèi)部時(shí)鐘(LSI)
LSI RC作為一個(gè)低速時(shí)鐘源,它可以運(yùn)行在停止和待機(jī)模式中給獨(dú)立看門(mén)狗(IWDG)和自動(dòng)喚醒(AWU)。它的時(shí)鐘頻率在32MHZ左右。
02
代碼分析
時(shí)鐘初始化代碼在system_stm32f2xx.c文件中,大部分時(shí)候我們不需要修改時(shí)鐘代碼的,各個(gè)總線的頻率我們可以在文件頭看到。
=============================================================================
*=============================================================================
* Supported STM32F2xx device revision | Rev B and Y
*-----------------------------------------------------------------------------
* System Clock source | PLL (HSE)
*-----------------------------------------------------------------------------
* SYSCLK(Hz) | 120000000
*-----------------------------------------------------------------------------
* HCLK(Hz) | 120000000
*-----------------------------------------------------------------------------
* AHB Prescaler | 1
*-----------------------------------------------------------------------------
* APB1 Prescaler | 4
*-----------------------------------------------------------------------------
* APB2 Prescaler | 2
*-----------------------------------------------------------------------------
* HSE Frequency(Hz) | 25000000
*-----------------------------------------------------------------------------
* PLL_M | 25
*-----------------------------------------------------------------------------
* PLL_N | 240
*-----------------------------------------------------------------------------
* PLL_P | 2
*-----------------------------------------------------------------------------
* PLL_Q | 5
*-----------------------------------------------------------------------------
* PLLI2S_N | NA
*-----------------------------------------------------------------------------
* PLLI2S_R | NA
*-----------------------------------------------------------------------------
* I2S input clock | NA
*-----------------------------------------------------------------------------
* VDD(V) | 3.3
*-----------------------------------------------------------------------------
* Flash Latency(WS) | 3
*-----------------------------------------------------------------------------
* Prefetch Buffer | ON
*-----------------------------------------------------------------------------
* Instruction cache | ON
*-----------------------------------------------------------------------------
* Data cache | ON
*-----------------------------------------------------------------------------
* Require 48MHz for USB OTG FS, | Enabled
* SDIO and RNG clock |
*-----------------------------------------------------------------------------
*=============================================================================
******************************************************************************
在文件開(kāi)始定義的有系統(tǒng)時(shí)鐘頻率的全局變量SystemCoreClock,其他地方需要時(shí)鐘頻率,可以直接使用該變量。
uint32_t SystemCoreClock = 120000000;
時(shí)鐘配置從SystemInit函數(shù)執(zhí)行,調(diào)用SystemInit的在匯編文件中startup_stm32f2xx.s(Keil編譯環(huán)境)。
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
在這里說(shuō)明一下文檔版本的問(wèn)題:
▲ STM32F20X_User_manual的V7版和V8版對(duì)比圖
上述兩圖的區(qū)別是系統(tǒng)最大時(shí)鐘從120MHZ變成了168MHZ,我的理解是同樣是STM32F20X,ST由于技術(shù)進(jìn)步或其他,使得新版STM32F207芯片超頻支持168MHZ。
下面我們主要分析SystemCoreClock的120M時(shí)鐘怎么從一個(gè)外部25MHZ的HSE得到的。
我們要從25MHZ的外部時(shí)鐘得到120M的系統(tǒng)時(shí)鐘,需要上圖中標(biāo)注的重要4點(diǎn):
1、使能HSE
2、選擇HSE作為主PLL的輸入時(shí)鐘
3、主PLL倍頻后得到120MHZ時(shí)鐘
4、系統(tǒng)時(shí)鐘選擇主PLL時(shí)鐘輸出作為系統(tǒng)時(shí)鐘
我們找到對(duì)應(yīng)的代碼
1、使能HSE
/* Enable HSE */
RCC- >CR |= ((uint32_t)RCC_CR_HSEON);
在RCC_CR寄存器(RCCclock control register RCC時(shí)鐘控制器)中,有打開(kāi)HSE的控制位
2、選擇HSE作為主PLL的輸入時(shí)鐘
/* Configure the main PLL */
RCC- >PLLCFGR = PLL_M | (PLL_N < < 6) | (((PLL_P > > 1) -1) < < 16) |
(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q < < 24);
RCC_PLLCFGR_PLLSRC_HSE就是配置HSE作為主PLL的輸入時(shí)鐘
3、主PLL倍頻后得到120MHZ時(shí)鐘
/* Configure the main PLL */
RCC- >PLLCFGR = PLL_M | (PLL_N < < 6) | (((PLL_P > > 1) -1) < < 16) |
(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q < < 24);
4、配置主PLL作為系統(tǒng)時(shí)鐘的輸入時(shí)鐘
/* Select the main PLL as system clock source */
RCC- >CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC- >CFGR |= RCC_CFGR_SW_PL
對(duì)于主PLL的配置寄存器,在RCC_PLLCFGR寄存器中有說(shuō)明
整理后得知f(out)=f(in)* N / M / P
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M 25
#define PLL_N 240
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P 2
這樣就獲得了120M時(shí)鐘
注意:
PLL_M大于等于2且小于等于63
PLL_N大于等于64且小于等于432
PLL_P只能是2、4、6、或8
但2對(duì)應(yīng)0,4對(duì)應(yīng)1,6對(duì)應(yīng)2,8對(duì)應(yīng)3。
ST并沒(méi)有使用if或case語(yǔ)句判斷,因?yàn)閷?duì)應(yīng)的數(shù)據(jù)除以2減去1就是寄存器這兩位的值,所以可以按照下面這樣寫(xiě),這種寫(xiě)法值得我們學(xué)習(xí)。
(((PLL_P > > 1) -1) < < 16)
其他外設(shè)的時(shí)鐘配置時(shí)
/* HCLK = SYSCLK / 1*/
RCC- >CFGR |= RCC_CFGR_HPRE_DIV1;
/* PCLK2 = HCLK / 2*/
RCC- >CFGR |= RCC_CFGR_PPRE2_DIV2;
/* PCLK1 = HCLK / 4*/
RCC- >CFGR |= RCC_CFGR_PPRE1_DIV4;
** 備 注 **
** 時(shí)鐘中斷**
可以配置外部晶振出錯(cuò)時(shí)的中斷,還有RCC中斷,因此我們可以在外部時(shí)鐘出問(wèn)題時(shí),切換為內(nèi)部時(shí)鐘,不至于整個(gè)系統(tǒng)掛掉。具體見(jiàn)ST給的官方代碼。
無(wú)源晶振不起振
沒(méi)有程序,無(wú)源晶振是不起振的,需要配置RCC時(shí)鐘控制寄存器的HSEON位打開(kāi)或關(guān)閉HSE振蕩器。
關(guān)于APB和PCLK
F207是時(shí)鐘圖沒(méi)有顯示PCLK1和PCLK2,應(yīng)該就是APB1和APB2
應(yīng)該指的是一個(gè)PCLK應(yīng)該是PeripheralClock的簡(jiǎn)稱,看F105手冊(cè)
-
陶瓷諧振器
+關(guān)注
關(guān)注
0文章
22瀏覽量
9558 -
PLL電路
+關(guān)注
關(guān)注
0文章
92瀏覽量
6431 -
STM32F207
+關(guān)注
關(guān)注
0文章
9瀏覽量
6578 -
rc振蕩器
+關(guān)注
關(guān)注
3文章
48瀏覽量
9584 -
時(shí)鐘系統(tǒng)
+關(guān)注
關(guān)注
1文章
101瀏覽量
11749
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論