任何處理器,讀到Clock時鐘部分,總是費勁的。
系統時鐘(system clock)SYSCLK可以來自四種時鐘源:
HSI(high-speed internal)內部振盪器時鐘
HSE(high-speed external)外部振盪器時鐘
PLL時鐘
MSI(multispeed internal)振盪器時鐘
啓動復位/從Stop或Standby狀態喚醒之後默認將MSI作爲時鐘源。
設備包含下面的二級時鐘源:
37KHz低速RC(LSI RC)時鐘,用來驅動獨立看門狗和RTC(用以從Stop/Standby模式中喚醒)的一個時鐘選項。
32.768kHz低速外部晶體(LSE crystal),作爲RTC的一個可選時鐘(RTCCLK)。
每個時鐘源可以被獨立的打開關閉,這便於優化功耗。
多個預分頻器允許配置AHB,高速APB2和低速APB1。AHB/APB2/APB1的最大值爲32MHz.這決定於設備電壓範圍,詳情參考PWR一章的Dynamic voltage scalling management一節。
所有的外圍時鐘都來自SYSCLK,除了:
48MHzUSB時鐘和SDIO時鐘,它們的時鐘源來自PLL VOC時鐘;
ADC時鐘始終來自HSI時鐘。分頻1,2或者4用以根據設備運行條件而適應時鐘頻率。更多詳細內容參考PWR一章的Operating Power Supply Range一節。
RTC/LCD時鐘來自LSE,LSI或者1MHz的HSE_RTC(被編程分頻的HSE)。
IWDG時鐘始終來自LSI時鐘
系統時鐘(SYSCLK)頻率必須高於或等於RTC/LCD時鐘頻率。
AHB時鐘(HCLK)被8分頻可以被用來作爲Cortex System Timer(SysTick)外部時鐘。SysTick可以來自這個時鐘,也可以來自Cortex clock(HCLK),這可以根據SysTick的控制和狀態寄存器配置。
Timer的時鐘頻率自動由硬件鎖定。有兩種情形:
1.APB預分頻器爲1,Timer時鐘頻率與所相連的APB是時鐘頻率一致;
2.否則,Timer的時鐘頻率是所連的APB時鐘的2倍。
FCLK作爲Cortex-M3的自由(Free running)時鐘。詳情參考ARM Cortex M3 Technical Reference Manual。
6.2.2 HSI時鐘
HSI時鐘由內部16MHz RC振盪器產生。它可以直接用於System clock或者PLL的輸入。
HSI RC振盪器好處是可以提供一個廉價的時鐘源(不需要外部器件)。雖然比起外部晶體振盪器或陶瓷諧振器它的頻率精度要低一些,但它的啓動速度要快。
校準
。。。。
RCC_CR寄存器的HSIRDY標識位用以指示HSI振盪器穩定與否。啓動時,HSI RC的時鐘直到這一位被硬件置1才輸出。
HSI RC振盪器可以使用RCC_CR寄存器的HSION比特位來啓動和關閉HSI RC振盪器。
6.2.3 MSI時鐘
MSI時鐘產生自內部RC振盪器。它的頻率可以由RCC_ICSCR寄存器的MSIRANGE[2:0]比特配置。有7種頻率範圍:65.536kHz,131.072kHz,262.144kHz,524.288kHz,1.048MHz,2.097MHz(默認值)和4.194MHz.
系統重啓、從Stop和Standby低功耗喚醒後系統時鐘都使用的是MSI時鐘。重啓後或者從Standby喚醒之後,MSI頻率設置爲默認值。RCC_ICSCR寄存器的值在從STOP模式下繼續保存,也就是說MSI頻率和校準值在喚醒後的值和進入STOP模式前一樣。
MSI的RC振盪器的優點是可以作爲低功耗時鐘源(無外圍電路)。它可以作爲低功耗模式下的喚醒時鐘以減少功耗和喚醒時間。
RCC_CR寄存器的MSIRDY標誌位表示MSI的RC穩定與否。啓動後,MSI的RC輸出時鐘不釋放直到該比特被硬件置1。
可以通過RCC_CR寄存器的MSION位打開和關閉MSI的RC。
當HSE晶體出錯後,MSI還可以作爲輔助的備用時鐘源。
校準
由於製造過程的差異不同片子的MSI RC振盪器頻率也會有差異。這也是爲什麼每個設備都經過ST的出長校準,在是室溫TA爲30度的情形下校準精度1%.
重啓後,出廠校準值從RCC_ICSCR寄存器的MSICAL[7:0]裝載。如果應用電壓和溫度不同,那麼會影響到RC振盪器的速率。你還可以通過RCC_ICSCR寄存器的MSITRIM[7:0]比特來調整MSI頻率。更多詳細關於如何測量MSI的頻率變化請參考6.2.14節。
6.2.5 LSE時鐘
LSE晶體是一個32.768kHz的低速外部晶體或者陶瓷振盪器。它的優勢在於爲提供時鐘/日曆RTC外圍模塊提供時鐘源。
LSE晶體可以通過RCC_CSR寄存器的LSEON位開啓或關閉。
RCC_CSR寄存器上的LSERDY位則表示LSE晶體是否穩定。啓動後,LSE晶體輸出時鐘信號直到該位置1才被釋放。如果RCC_CIR寄存器上相應的位使能後,則穩定後將產生相應的中斷。
外部源(LSE旁路)
該模式下,必須提供一個外部時鐘源。頻率最高可以達到1MHz。該模式可以通過設置RCC_CSR寄存器的LSEBYP和LSEON位爲1而提供。大約50%佔空比的外部時鐘信號(方波,正弦波或三角波)驅動OSC32_IN引腳,OSC32_OUT引腳則可以作爲GPIO。
6.2.7 系統時鐘(SYSCLK)選擇
SYSCLK可以選擇自四種時鐘源:
HSI振盪器
HSE振盪器
PLL振盪器
MSI振盪器
如果直接或者間接通過PLL作爲鍾源,就不可能停止該時鐘。
只有在目標時鐘源穩定之後纔可以從一種時鐘源切換爲另外一種時鐘源(時鐘在啓動之後穩定下來或者PLL鎖定之後)。如果所選的時鐘沒有穩定下來,那麼切換將在時鐘穩定下來之後發生。RCC_CR寄存器的狀態位表明哪些時鐘穩定了和當前系統時鐘選擇了哪個時鐘。
6.2.13 時鐘向外輸出功能
微處理器時鐘輸出(MCO)功能允許時鐘經過分頻器(1,2,4,8或者16)輸出到外部MCO引腳(PA8)。相應的GPIO配置寄存器必須設置爲外圍功能模式。可以選擇7種時鐘信號之一作爲MCO時鐘輸出。
SYSCLK
HSI
MSI
HSE
PLL
LSI
LSE
RCC_CFGR寄存器的MCOSEL[2:0]用來選擇以上七種信號之一。