EFR32 晶振電容設定

2021-10-19 23:29:25 字數 1783 閱讀 4199

_silicon_labs_32b_series_2 (efr32mg21)系列晶元可以設定電容值的地方有3處。

這裡只說高速晶振的,低速晶振類似

#define userdata_tokens 0x1000

第1處( a ):

#define mfg_xo_tune_location (userdata_tokens | 0x070) // 2 bytes

第2處( b ):

#define mfg_ctune_location (userdata_tokens | 0x100) // 2 bytes

第3處( c ):.hwconf檔案

生效順序:a > b > c

所以如果同時設定了a、b、c三處,生效的是a。

**邏輯:

#if defined(bsp_clk_hfxo_ctune) && (bsp_clk_hfxo_ctune >= 0)

#if defined(_silicon_labs_32b_series_2)

hfxoinit.ctunexiana = bsp_clk_hfxo_ctune;

hfxoinit.ctunexoana = bsp_clk_hfxo_ctune;

#else

hfxoinit.ctunesteadystate = bsp_clk_hfxo_ctune;

#endif

// series 2

#endif

// bsp_clk_hfxo_ctune

#if defined(_silicon_labs_32b_series_2)

uint8_t customsteadyctunexi;

uint8_t customsteadyctunexo;

uint16_t customsteadyctunetoken;

// check factory calibrated ctune valueif(

halinternalgetmodulectunexixo

(&customsteadyctunexi,

&customsteadyctunexo)

)// otherwise check for ctune in mfg token

elseif(

halinternalgetctunetoken

(&customsteadyctunetoken,

&customsteadyctunetoken)

)#else

uint16_t customsteadyctunemodule;

uint16_t customsteadyctunetoken;

// check factory calibrated ctune valueif(

halinternalgetmodulectune

(&customsteadyctunemodule)

)// otherwise check for ctune in mfg token

elseif(

halinternalgetctunetoken

(&customsteadyctunetoken,

&customsteadyctunetoken)

)else

#endif

// series 2

cmu_hfxoinit

(&hfxoinit)

;

晶振需要配多大電容

這要根據晶振的規格和電路中的因素來確定,同是16mhz的晶體諧振器,其負載電容值有可能不一樣,如10pf,20pf.負載電容值是在其生產加工過程中確定的,無法進行改變.購買晶振時應該能得到準確的規格書.晶振在電路中使用時,應滿足cl c cs.cl為規格書中晶振的負載電容值,c為電路中外置的電容值 ...

STM32L1學習筆記04 晶振設定

關於stm32的學習,初學者很容易被晶振這個東西給坑了。要在乙個新平台上開發,先要把晶振搞定。檢視介紹sensornode例程的晶振是12mhz,sk和另乙個都是16mhz。下面例項講解下如何調整到16mhz,看下晶振如何設定。src boards sensornode cmsis stm32l1x...

stm32f4晶振管理

最近要使用stm32f4晶元做開發,根據自己的程式設計習慣,做一些學習記錄,以便於自己以後查閱。我們在設計電路的時候,一般都會設計mcu使用外部晶振,筆者工作中曾經遇到外部晶振故障晶元無法正常啟動問題 無內部晶振老的mcu 使用示波器發現的,在更換了外部晶振以後,問題就解決了。由此筆者想到,stm3...