時(shí)鐘信號(hào)推動(dòng)單片機(jī)內(nèi)各個(gè)部分執(zhí)行相應(yīng)的指令,時(shí)鐘就像人的心跳一樣。
STM32本身十分復(fù)雜,外設(shè)非常多,任何外設(shè)都需要時(shí)鐘才能啟動(dòng),但并不是所有的外設(shè)都需要系統(tǒng)時(shí)鐘那么高的頻率,如果都用高速時(shí)鐘勢(shì)必造成浪費(fèi)。同一個(gè)電路,時(shí)鐘越快功耗越大、抗電磁干擾能力越弱。復(fù)雜的MCU采用多時(shí)鐘源的方法來(lái)解決這些問(wèn)題。如下圖,是STM32的時(shí)鐘系統(tǒng)框圖。
如上圖左邊的部分,看到STM32有4個(gè)獨(dú)立時(shí)鐘源,HSI、HSE、LSI、LSE。
HSI是高速內(nèi)部時(shí)鐘,RC振蕩器,頻率為8MHz,精度不高。
HSE是高速外部時(shí)鐘,可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4MHz~16MHz。
LSI是低速內(nèi)部時(shí)鐘,RC振蕩器,頻率為40kHz,提供低功耗時(shí)鐘。
LSE是低速外部時(shí)鐘,接頻率為32.768kHz的石英晶體。
時(shí)鐘樹(shù)的右邊紅色框中,則是系統(tǒng)時(shí)鐘通過(guò)AHB預(yù)分頻器,給相對(duì)應(yīng)的外設(shè)設(shè)置相對(duì)應(yīng)的時(shí)鐘頻率。
其中LSI、LSE是作為IWDGCLK(獨(dú)立看門(mén)狗)時(shí)鐘源和RTC時(shí)鐘源使用。而HSI、HSE以及PLLCLK經(jīng)過(guò)分頻或者倍頻作為系統(tǒng)時(shí)鐘SYSCLK來(lái)使用。
PLL為鎖相環(huán)倍頻輸出,其時(shí)鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過(guò)72MHz。通過(guò)倍頻之后作為系統(tǒng)時(shí)鐘的時(shí)鐘源。
配置時(shí)鐘
默認(rèn)時(shí)鐘
Keil編寫(xiě)程序是默認(rèn)的時(shí)鐘為72Mhz,其實(shí)是這么來(lái)的:
外部高速晶振HSE提供的8MHz(大小與電路板上的晶振相關(guān))通過(guò)PLLXTPRE分頻器后,進(jìn)入PLLSRC選擇開(kāi)關(guān),進(jìn)而通過(guò)PLLMUL鎖相環(huán)進(jìn)行倍頻(x9)后,為系統(tǒng)提供72MHz的系統(tǒng)時(shí)鐘SYSCLK。之后是AHB預(yù)分頻器對(duì)時(shí)鐘信號(hào)進(jìn)行分頻,然后為低速外設(shè)提供時(shí)鐘。相關(guān)文章推薦:時(shí)鐘失效之后,STM32還能運(yùn)行?
內(nèi)部RC振蕩器HSI為8MHz,2分頻后是4MHz,進(jìn)入PLLSRC選擇開(kāi)關(guān),通過(guò)PLLMUL鎖相環(huán)進(jìn)行倍頻(最大x16)后為64MHz。
USB時(shí)鐘
如上圖,STM32的USB時(shí)鐘不能超過(guò)48MHz,因此如果時(shí)鐘源為72MHz,就需要進(jìn)行1.5分頻。
如果時(shí)鐘源為48MHZ,則進(jìn)行1分頻即可。
把時(shí)鐘信號(hào)輸出到外部
STM32可以選擇一個(gè)時(shí)鐘信號(hào)輸出到MCO腳(PA8)上,可以選擇為PLL輸出的2分頻、HSI、HSE、或者系統(tǒng)時(shí)鐘,可以把時(shí)鐘信號(hào)輸出供外部使用。
AHB分頻器
如時(shí)鐘樹(shù)圖右邊的部分,系統(tǒng)時(shí)鐘通過(guò)AHB分頻器給外設(shè)提供時(shí)鐘。從左到右可以簡(jiǎn)單理解為:
系統(tǒng)時(shí)鐘->AHB分頻器->各個(gè)外設(shè)分頻倍頻器->外設(shè)時(shí)鐘的設(shè)置。
右邊部分為:系統(tǒng)時(shí)鐘SYSCLK通過(guò)AHB分頻器分頻后送給各模塊使用,AHB分頻器可選擇1、2、4、8、16、64、128、256、512分頻。其中AHB分頻器輸出的時(shí)鐘送給5大模塊使用:
內(nèi)核總線:送給AHB總線、內(nèi)核、內(nèi)存和DMA使用的HCLK時(shí)鐘。
Tick定時(shí)器:通過(guò)8分頻后送給Cortex的系統(tǒng)定時(shí)器時(shí)鐘。
I2S總線:直接送給Cortex的空閑運(yùn)行時(shí)鐘FCLK。
APB1外設(shè):送給APB1分頻器。APB1分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB1外設(shè)使用(PCLK1,最大頻率36MHz),另一路送給通用定時(shí)器使用。該倍頻器可選擇1或者2倍頻,時(shí)鐘輸出供定時(shí)器2-7使用。
APB2外設(shè):送給APB2分頻器。APB2分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB2外設(shè)使用(PCLK2,最大頻率72MHz),另一路送給高級(jí)定時(shí)器。該倍頻器可選擇1或者2倍頻,時(shí)鐘輸出供定時(shí)器1和定時(shí)器8使用。另外,APB2分頻器還有一路輸出供ADC分頻器使用,分頻后送給ADC模塊使用。ADC分頻器可選擇為2、4、6、8分頻。需要注意的是,如果APB預(yù)分頻器分頻系數(shù)是1,則定時(shí)器時(shí)鐘頻率(TIMxCLK)為PCLKx。否則,定時(shí)器時(shí)鐘頻率將為 APB 域的頻率的兩倍:TIMxCLK = 2xPCLKx。
APB1和APB2的對(duì)應(yīng)外設(shè)
F1系列中,APB1上面連接的是低速外設(shè),包括電源接口、備份接口、CAN、USB、I2C1、I2C2、USART2、USART3、UART4、UART5、SPI2、SP3等。
APB2上面連接的是高速外設(shè),包括UART1、SPI1、Timer1、ADC1、ADC2、ADC3、所有的普通I/O口(PA-PE)、第二功能I/O(AFIO)口等。
具體可以在stm32f10x_rcc.h中查看外設(shè)掛在哪個(gè)時(shí)鐘下。
時(shí)鐘監(jiān)視系統(tǒng)(CSS)
另外,STM32還提供了一個(gè)時(shí)鐘監(jiān)視系統(tǒng)(CSS),用于監(jiān)視高速外部時(shí)鐘(HSE)的工作狀態(tài)。倘若HSE失效,會(huì)自動(dòng)切換(高速內(nèi)部時(shí)鐘)HSI作為系統(tǒng)時(shí)鐘的輸入,保證系統(tǒng)的正常運(yùn)行。
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634659 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355744 -
時(shí)鐘樹(shù)
+關(guān)注
關(guān)注
0文章
54瀏覽量
10741 -
時(shí)鐘信號(hào)
+關(guān)注
關(guān)注
4文章
448瀏覽量
28542 -
時(shí)鐘系統(tǒng)
+關(guān)注
關(guān)注
1文章
101瀏覽量
11715
原文標(biāo)題:詳解STM32的時(shí)鐘系統(tǒng),收藏了
文章出處:【微信號(hào):EE時(shí)間,微信公眾號(hào):EE時(shí)間】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論