_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...