如何将HFCLK更改为由微处理器上的低频振荡器控制?

如何将HFCLK更改为由微处理器上的低频振荡器控制?,c,embedded,clock,microprocessors,C,Embedded,Clock,Microprocessors,我使用的是由Energy Micro制造的EFM32G2222F128壁虎微型推进器。我试图使该芯片的电流消耗尽可能低,为此,我想将核心时钟切换为使用低频RC振荡器(LFRCO),而不是高频振荡器 我知道核心时钟由高频时钟(HFCLK)驱动,但这可以由高频振荡器或低频振荡器控制。默认情况下,它被设置为由HFRCO在复位/通电时控制,其频率为14MHz(同样默认,但这可能在1MHz-28MHz之间),我的问题是频率越高,芯片的电流消耗越高,所以我想把核心时钟改成32.768KHz的低频振荡器——要

我使用的是由Energy Micro制造的EFM32G2222F128壁虎微型推进器。我试图使该芯片的电流消耗尽可能低,为此,我想将核心时钟切换为使用低频RC振荡器(LFRCO),而不是高频振荡器

我知道核心时钟由高频时钟(HFCLK)驱动,但这可以由高频振荡器或低频振荡器控制。默认情况下,它被设置为由HFRCO在复位/通电时控制,其频率为14MHz(同样默认,但这可能在1MHz-28MHz之间),我的问题是频率越高,芯片的电流消耗越高,所以我想把核心时钟改成32.768KHz的低频振荡器——要低得多

有两个板载振荡器-HFRCO和LFRCO-所以我没有可用的组件不是问题,我只是不知道为什么我现在的代码不工作。下面是上述代码,我将在下面进行解释:

int main(void){ 

    /* Chip errata */
    CHIP_Init();

    CMU->OSCENCMD = (1 << 6);          // Enable LFRCO oscillator
    while(!(CMU->STATUS & (1 << 7)));  // Wait for oscillator to stabilize

    EMU_UpdateOscConfig();

    CMU->CMD = (3 << 0);               // Set LFRCO as HF core clock **PROBLEM**

    CMU->OSCENCMD = (1 << 1);          // Disable HFRCO
}
int main(void){
/*芯片勘误表*/
CHIP_Init();

CMU->OSCENCMD=(1 STATUS&(1 CMD=(3 OSCENCMD=(1)既然您已经将EFM32库与EMU\u updatesconfig()
一起使用,我不确定您为什么不简单地使用它?我建议,如果您使用该库,您可以将其用于所有内容,而不是将库的使用与直接寄存器访问混合使用

查看for
CMU\u ClockSelectSet()
,它会执行许多您没有执行的操作,或者以不同的顺序执行