STM32的時(shí)鐘體系可以直接以圖概括(摘自STM32F10X參考手冊(cè))
下面就此圖做分析
1. STM32輸入時(shí)鐘源
1.1 時(shí)鐘源的作用
無(wú)論是小型單片機(jī)還是像STM32這樣高級(jí)單片機(jī),它們工作的核心都是大規(guī)模的時(shí)序邏輯電路,而驅(qū)動(dòng)時(shí)序邏輯電路的關(guān)鍵則是準(zhǔn)確而又穩(wěn)定的時(shí)鐘源。它的作用就像小學(xué)在操場(chǎng)上做廣播體操時(shí)候播放的背景音樂(lè),用于協(xié)調(diào)和同步各單元運(yùn)行,為時(shí)序電路提供基本的脈沖信號(hào)。
1.2 STM32時(shí)鐘源的設(shè)計(jì)
在51單片機(jī)中,一般都外接一個(gè)11.0592MHz的晶振,注意,提供時(shí)鐘的不是晶振,而是RC時(shí)鐘電路,而晶振只是時(shí)鐘電路的元件之一。同理,在STM32中,時(shí)鐘源也是由RC時(shí)鐘電路產(chǎn)生,與51單片機(jī)的區(qū)別是區(qū)別在于,RC電路的位置。根據(jù)RC電路的位置,可以將STM32的時(shí)鐘源分為內(nèi)部時(shí)鐘電路和外部時(shí)鐘、內(nèi)外部時(shí)鐘電路。
(1)內(nèi)部時(shí)鐘電路:
晶體振蕩器和RC時(shí)鐘電路都在STM32芯片內(nèi)部,如圖中標(biāo)注1、標(biāo)注4。
標(biāo)注1處是產(chǎn)生8MHz的時(shí)鐘源,稱(chēng)為HSI,高速內(nèi)部時(shí)鐘源(H意為高速,S意為源,I意為內(nèi)部);
標(biāo)注4處是產(chǎn)生32KHz的時(shí)鐘源,稱(chēng)為L(zhǎng)SI,低速內(nèi)部時(shí)鐘源;
(2)內(nèi)外部時(shí)鐘電路:
晶體振蕩器在STM32芯片外部,RC時(shí)鐘電路在STM32芯片內(nèi)部,如圖中標(biāo)注2、標(biāo)注3。
標(biāo)注2處是產(chǎn)生4-16MHz的時(shí)鐘源,稱(chēng)為HSE,高速外部時(shí)鐘源;
標(biāo)注3是產(chǎn)生32.768KHz的時(shí)鐘源,稱(chēng)為L(zhǎng)SE,低速外部時(shí)鐘源;
OSC_OUT和OSC_IN、OSC32_OUT和OS32_IN分別接晶振的兩個(gè)引腳。前者一般接8MHz晶振;后者一定接32.768KHz,因?yàn)檫@個(gè)時(shí)鐘源是供給RTC實(shí)時(shí)時(shí)鐘使用的。在51單片機(jī)中沒(méi)有集成RTC模塊,在做電子時(shí)鐘時(shí)用到的DS1302集成芯片時(shí),也是為其提供的也是32.768KHz的晶振。
(3)外部時(shí)鐘電路
晶體振蕩電路和RC時(shí)鐘電路都在STM32芯片外部。如圖中標(biāo)注2、標(biāo)注3。
OSC_OUT和OSC_IN、OSC32_OUT和OS32_IN除了分別接晶振的兩個(gè)引腳,對(duì)于OSC_IN和OSC32_IN引腳,還可以接入外部的RC時(shí)鐘電路,其時(shí)鐘源直接由外部供給,不過(guò)這種方案少見(jiàn)。
綜上所述,STM32的時(shí)鐘源有4個(gè): HSI、HSE和LSI、LSE。
HSI時(shí)鐘源,它是在由STM32在內(nèi)部用RC振蕩電路實(shí)現(xiàn)的高速內(nèi)部時(shí)鐘源。HIS RC振蕩器能夠在不需要任何外部期間的條件下提供系統(tǒng)時(shí)鐘,它的啟動(dòng)時(shí)間比HSE晶體振蕩器短,但是不精準(zhǔn),即使在校準(zhǔn)之后它的時(shí)鐘頻率精度仍較差。在手冊(cè)中還明確說(shuō),當(dāng)HSI被用作PLL時(shí)鐘輸入時(shí),系統(tǒng)時(shí)鐘能得到的最大頻率是61MHz,這顯然不能發(fā)揮STM32最極致的性能。
1.3 時(shí)鐘信號(hào)通道選擇
雖然HSI不精準(zhǔn),但是鑒于啟動(dòng)速度原因考慮,STM32上電復(fù)位,默認(rèn)是采用HSI時(shí)鐘源的,當(dāng)然開(kāi)發(fā)者可以不修改這個(gè)時(shí)鐘源,那么系統(tǒng)將一直工作在一個(gè)時(shí)鐘源不穩(wěn)定不精準(zhǔn)的環(huán)境下。
然而一般做法是改變時(shí)鐘源,將時(shí)鐘源改為HSE。改變時(shí)鐘源的通道是在相關(guān)寄存器設(shè)置的,在圖中的PLLSRC可以實(shí)現(xiàn)對(duì)這兩個(gè)頻率的切換。
1.4 鎖相環(huán)倍頻器PLL/預(yù)分頻器Prescaler
STM32的cpu的工作常規(guī)頻率是72MHZ(超過(guò)72MHz工作稱(chēng)為超頻工作,CPU耗電加劇,且會(huì)發(fā)燙),但是我們接入的晶振是8MHz,這就需要一個(gè)對(duì)頻率加倍的操作,即倍頻。如圖中的PLLMUL,PLLMULL實(shí)現(xiàn)對(duì)接入時(shí)鐘源的倍頻,如x2、x3、x4…倍頻后的時(shí)鐘源為PLLCLK。
預(yù)分頻器是實(shí)現(xiàn)對(duì)頻率削減作用的。倍頻器將HSE倍頻之后提供給cpu,但是除了cpu之外,其他片內(nèi)外設(shè),如SPI控制模塊、IIC控制模塊等的工作同樣需要時(shí)鐘源,這些外設(shè)的時(shí)鐘源肯定是低于cpu運(yùn)行時(shí)鐘的,例如USB通訊才需要48MHz,所以需要對(duì)倍頻后的時(shí)鐘源進(jìn)行分頻。一般芯片的分頻做法都是對(duì)一個(gè)時(shí)鐘源倍頻后供給某些部件,其他低于此倍頻后的時(shí)鐘都是基于此時(shí)鐘源來(lái)分頻的。用戶可通過(guò)多個(gè)預(yù)分頻器配置AHB,高速APB(APB2)和低速APB(APB1)域的頻率。AHB和APB2域的最大頻率是72MHz。APB1域的最大允許頻率是36MHz。SDIO接口的時(shí)鐘頻率固定在HCLK / 2。
經(jīng)過(guò)時(shí)鐘源的選擇、分頻/倍頻,就可以到HCLK(高性能總線AHB用)、FCLK(供給cpu內(nèi)核的用,常說(shuō)的cpu主頻)、PCLK(高性能外設(shè)總線APB)、USBCLK、TIMXCLK、TIM1CLK、RTCCLK等,外設(shè)是掛載STM32的總線上的,具體哪個(gè)外設(shè)掛載哪個(gè)總線,看下圖:
在軟件開(kāi)發(fā)中,我們要做的也無(wú)非設(shè)置門(mén)電路以選擇時(shí)鐘源輸入、倍頻/分頻系數(shù)和打開(kāi)/關(guān)閉對(duì)應(yīng)外設(shè)所在總線的時(shí)鐘。
2. STM32輸出時(shí)鐘源
圖中的MCO功能模塊,可以將PLLCLK / 2、HSI、HSE、SYSCLK輸出,供給其他系統(tǒng)作為輸入時(shí)鐘源,對(duì)這一功能模塊也是又相應(yīng)的寄存器,圖中以MCO標(biāo)注。
3. 系統(tǒng)滴答Systick
Systick就是一個(gè)定時(shí)器而已,只是它放在了NVIC中,主要的目的是為了給操作系統(tǒng)提供一個(gè)硬件上的中斷,稱(chēng)之為滴答中斷操作系統(tǒng)進(jìn)行運(yùn)轉(zhuǎn)的時(shí)候,也會(huì)有時(shí)間節(jié)拍。它會(huì)根據(jù)節(jié)拍來(lái)工作,把整個(gè)時(shí)間段分成很多小小的時(shí)間片,而每個(gè)任務(wù)每次只能運(yùn)行一個(gè)時(shí)間片的時(shí)間長(zhǎng)度,超時(shí)就退出給別的任務(wù)運(yùn)行,這樣可以確保任何一個(gè)任務(wù)都不會(huì)霸占操作系統(tǒng)提供的各種定時(shí)功能,都與這個(gè)滴答定時(shí)器有關(guān)。因此,需要一個(gè)定時(shí)器來(lái)產(chǎn)生周期性的中斷,而且最好還讓用戶程序不能隨意訪問(wèn)它的寄存器,以維持操作系統(tǒng)的節(jié)拍。只要不把它在SysTick控制及狀態(tài)寄存器中的使能位清除,就一直執(zhí)行。
RCC(復(fù)位與時(shí)鐘控制器)通過(guò)AHB時(shí)鐘(HCLK)8分頻后作為Cortex系統(tǒng)定時(shí)器(SysTick)的外部時(shí)鐘。通過(guò)對(duì)SysTick控制與狀態(tài)寄存器的設(shè)置,可選擇上述時(shí)鐘或Cortex(HCLK)時(shí)鐘作為SysTick時(shí)鐘(后者圖中沒(méi)畫(huà)出)。另外,還有其他時(shí)鐘,如USB時(shí)鐘,ADC時(shí)鐘、獨(dú)立看門(mén)狗時(shí)鐘等,它們各自的時(shí)鐘源通過(guò)前面學(xué)習(xí),也可以輕易分析出來(lái),這里不再贅述。
4. 時(shí)鐘相關(guān)的寄存器
時(shí)鐘體系涉及到的寄存器有:
-
電路
+關(guān)注
關(guān)注
172文章
5828瀏覽量
171811 -
寄存器
+關(guān)注
關(guān)注
31文章
5301瀏覽量
119866 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1716瀏覽量
131293
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論