不論STM8還是STM32系列的MCU,芯片復(fù)位后默認(rèn)時(shí)鐘源都是內(nèi)部HSI,要使用外部時(shí)鐘源HSE的話(huà),得通過(guò)軟件對(duì)相關(guān)控制寄存器進(jìn)行使能配置才行。 如果使用外部HSE的話(huà),一般有兩種模式: 
1、外部晶體/陶瓷諧振器(HSE晶體)模式 這種模式用得比較常見(jiàn),HSE晶體可以為系統(tǒng)提供較為精確的時(shí)鐘源。在時(shí)鐘控制寄存器RCC_CR中的HSERDY位用來(lái)指示高速外部振蕩器是否穩(wěn)定。在啟動(dòng)時(shí),直到這一位被硬件置’1’,時(shí)鐘才被釋放出來(lái)。HSE晶體可以通過(guò)設(shè)置時(shí)鐘控制寄存器里RCC_CR中的HSEON位被啟動(dòng)和關(guān)閉。 該時(shí)鐘源是由外部無(wú)源晶體與MCU內(nèi)部時(shí)鐘驅(qū)動(dòng)電路共同配合形成,有一定的啟動(dòng)時(shí)間,精度較高。為了減少時(shí)鐘輸出的失真和縮短啟動(dòng)穩(wěn)定時(shí)間,晶體/陶瓷諧振器和負(fù)載電容必須盡可能地靠近振蕩器引腳。負(fù)載電容值必須根據(jù)所選擇的晶體來(lái)具體調(diào)整。手冊(cè)里明確地寫(xiě)明了這句,很多時(shí)候似乎被無(wú)視了。關(guān)于這點(diǎn),ST官方有專(zhuān)門(mén)出了個(gè)應(yīng)用筆記,編號(hào)為AN2867?梢匀www.stmcu.com.cn 或者www.st.com 搜索下載。 整體上講,陶瓷晶體和石英晶體的主要區(qū)別就在于精度和溫度穩(wěn)定性上。石英晶體比陶瓷晶體精度要高,溫度穩(wěn)定性要好。
2、外部時(shí)鐘源(HSE旁路)模式 該模式下必須提供外部時(shí)鐘。用戶(hù)通過(guò)設(shè)置時(shí)鐘控制寄存器中的HSEBYP和HSEON位來(lái)選擇這一模式。外部時(shí)鐘信號(hào)(50%占空比的方波、正弦波或三角波)必須連到SOC_IN引腳,此時(shí)OSC_OUT引腳對(duì)外呈高阻態(tài)。 所謂HSE旁路模式,是指無(wú)需上面提到的使用外部晶體時(shí)所需的芯片內(nèi)部時(shí)鐘驅(qū)動(dòng)組件,直接從外界導(dǎo)入時(shí)鐘信號(hào)。猶如芯片內(nèi)部的驅(qū)動(dòng)組件被旁路了。 不過(guò),在使用該模式時(shí),經(jīng)常有人出現(xiàn)配置錯(cuò)誤,即使用跟HSE晶體模式一樣的配置。這點(diǎn)在STM8/STM32應(yīng)用中都有人發(fā)生。 所幸的是使用這個(gè)旁路模式的情形不像使用外部晶體模式那么多,不然可能更多人在這里遇到麻煩。 我們不妨以STM3F4系列芯片為例。 關(guān)于寄存器位上面已經(jīng)提到了,旁路模式除了配置HSEON還得配置HSEBYP位。 對(duì)于標(biāo)準(zhǔn)庫(kù)函數(shù)voidRCC_HSEConfig(uint32_t RCC_HSE) 或CUBE庫(kù)函數(shù)__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState)里的相關(guān)參數(shù)可能是:RCC_HSE_ON、 RCC_HSE_Bypass或RCC_HSE_OFF的其中之一。
如果使用STM32CUBEMX圖形配置界面的話(huà)可以看到3個(gè)選項(xiàng):

在ST MCU應(yīng)用開(kāi)發(fā)中,常有人會(huì)用到有源晶振作為時(shí)鐘源。如果用它該選擇哪種工作模式呢?

有源晶振一般是四腳封裝,電源、地線、振蕩輸出和一個(gè)控制端【或者懸空端】。相比無(wú)源晶體,有源晶振本身就是個(gè)完整的振蕩器件,只需要供給適當(dāng)?shù)碾娫淳湍茌敵鰰r(shí)鐘,無(wú)須額外的振蕩驅(qū)動(dòng)匹配電路。其時(shí)鐘輸出不依賴(lài)于外部器件振蕩電路,相對(duì)更不容易受外部線路不穩(wěn)定性的影響。自然其價(jià)格往往要高于無(wú)源晶體,不過(guò)其輸出電平幅度往往不能像無(wú)源晶體那樣隨著應(yīng)用電路的變化而變化。 不難看出,如果使用有源晶振作為外部時(shí)鐘源的話(huà),我們應(yīng)該配置為HSE旁路模式,而不是HSE晶體模式。將有源晶振的輸出腳接到MCU的OSC_IN腳。 本文作者:Miler Shao
|