基礎認識
為什么要有時鍾:
時鍾就是單片機的心臟,其每跳動一次,整個單片機的電路就會同步動作一次。時鍾的速率決定了兩次動作的間隔時間。速率越快,單片機在單位時間內所執行的動作將越多。時鍾是單片機運行的基礎,時鍾信號推動單片機內各個部分執行相應的指令。時鍾系統就是CPU的脈搏,決定cpu速率。
為什么這么多個時鍾源:
STM32系統是復雜的,高精度、低精度、高速、低速等,且可以對每個時鍾源進行開關操作,可以把不需要使用的關閉掉。這可以讓單片機適用更多的環境中,把選擇權利交個了開發者,開發者可以從精度、功耗、資源等多方面考慮。
STM32時鍾:
從時鍾源的角度可分為:
l 外部時鍾(E)
l 內部時鍾(I)
從時鍾速率的角度分為:
l 高速時鍾(HS)
l 低速時鍾(LS)
STM32在芯片復位后默認選用的是內部的高速時鍾(HSI)進行工作,如果需要使用外部高速時鍾(HSE)的話需要經過軟件操作相關的寄存器配置。
外部時鍾模式
外部的高速和低速時鍾均有這三個可選項目,圖中是CubeMX提供的外部時鍾選擇:

可選類型為
l Disable(關閉,不使用外部時鍾)
l BYPASS Clock Source(旁路時鍾源)
l Crystal/Ceramic Resonator(外部晶體/陶瓷諧振器)
外部晶體/陶瓷諧振器模式
該模式較為常見,這可以為系統時鍾提供較為精確的時鍾源。該時鍾源是由外部無源晶體與MCU內部時鍾驅動電路共同配合形成,有一定的啟動時間,精度較高。為了減少時鍾輸出的失真和縮短啟動穩定時間,晶體/陶瓷諧振器和負載電容必須盡可能地靠近振盪器引腳。負載電容值必須根據所選擇的晶體來具體調整。
整體上講,陶瓷晶體和石英晶體的主要區別就在於精度和溫度穩定性上。石英晶體比陶瓷晶體精度要高,溫度穩定性要好。
旁路時鍾源模式
該模式下必須提供外部時鍾。外部時鍾信號(50%占空比的方波、正弦波或三角波)必須連到SOC_IN引腳,此時OSC_OUT引腳對外呈高阻態。
所謂旁路模式,是指無需上面提到的使用外部晶體時所需的芯片內部時鍾驅動組件,直接從外界導入時鍾信號。
旁路時鍾源的典型應用--有源晶振
有源晶振一般是四腳封裝,電源、地線、振盪輸出和一個控制端【或者懸空端】。相比無源晶體,有源晶振本身就是個完整的振盪器件,只需要供給適當的電源就能輸出時鍾,無須額外的振盪驅動匹配電路。其時鍾輸出不依賴於外部器件振盪電路,相對更不容易受外部線路不穩定性的影響。自然其價格往往要高於無源晶體,不過其輸出電平幅度往往不能像無源晶體那樣隨着應用電路的變化而變化。
STM32系統時鍾框圖

系統時鍾源總共有4個:
l HSI RC:內部高速RC振盪器,相比於外部精度較低。通常約為8MHZ。通常作為系統的備用時鍾源(CSS控制)
l LSI RC:內部低速RC振盪器,相比於外部精度較低。通常約為40KHZ。通常作為看門狗時鍾源。
l HSE:外部高速時鍾,精度高,可接外部晶體/陶瓷諧振器或旁路時鍾源。范圍為4MHZ-16MHZ。通常通過PLL倍頻作為系統時鍾源。
l LSE:外部低速時鍾,精度高,可接外部晶體/陶瓷諧振器或旁路時鍾源。通常為32.768KHZ。通常作為RTC時鍾源。
其它:
l 其中SYSCLK是系統時鍾,對於每個芯片都有規定最大的系統時鍾是多少,超過則會出現錯誤。芯片的很多外設都是基於該時鍾的。
l CSS為時鍾監視系統,一旦HSE失效則自動切換至系統時鍾(SYSCLK)為內部高速RC振盪器時鍾(HSI)。
l MCO是時鍾輸出引腳,對應單片機的一個GPIO口,可以選擇輸出SYSCLK、HSI、HSE、PLLCLK/2的其中一個。
l 時鍾可以進行獨立的開啟和關閉

在STM32F103C8T6芯片中:
PC14和PC15是外部低速時鍾的輸入腳
PD0和PD1是外部高速時鍾的輸入腳
PA8是時鍾輸出引腳,輸出的時鍾可編程選擇
通常外部高速和低速時鍾輸入腳在不使用的情況下也盡量不要作為普通獨立IO使用

STM32F103C8T6的時鍾配置圖:
l LSE外部低速時鍾的頻率為32.768KHZ,給系統的RTC做為時鍾源
l LSI內部低速時鍾的頻率為40KHZ,給系統的獨立看門狗作為時鍾源
l HIS內部高速時鍾暫時沒有用到,頻率為8MHZ,但是值得注意的是“CSS Enabled”與“Enable CSS”的區別,前者表示開啟了。
l “CSS Enabled”表示開啟了時鍾監視系統,一旦HSE失效則自動切換至系統時鍾(SYSCLK)為內部高速RC振盪器時鍾(HSI)
l HSE選擇的是8MHZ,可以選擇的范圍為4-16MHZ
l 系統時鍾(SYSCLK)為72MHZ。時鍾來源是HSE經過PLL倍頻
l MCO時鍾輸出選擇的是PLLCLK/2,按照時鍾選擇可以理解為是SYSCLK/2,即72MHZ/2=36MHZ
