This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于Hibernation module的函数理解问题。

void HibernateEnableExpClk(uint32_t ui32HibClk);

我在阅读函数介绍的时候觉得里面的参数ui32HibClk is the rate of the clock supplied to the Hibernation module.

那么,我是不是应该理解成ui32HibClk是用于休眠模式下的时钟?

问题是,休眠模式不是运行在RTC时钟下么?还要设置别的时钟?

我写程序测试了,HibernateEnableExpClk里面参数写什么都没有变化?

请问,哪里出问题了?

  • 在使用休眠模块的系统中,休眠模块必须根据独立于主系统时钟之外的外部时钟源计时,即便没有使用RTC 功能也是如此。外部振荡器或者晶振可以作为休眠模块的时钟源。要使用晶振,应将32.768-kHz 晶振连接到XOSC0 和XOSC1 管脚上。或者,可以直接在XOSC0 管脚上连接一个32.768-kHz 振荡器,而保持XOSC1 悬空。

    上面是数据手册中的原话,可见你的这句/*休眠模式不是运行在RTC时钟下么?还要设置别的时钟?*/是错误的

  • 你没发现休眠模式下用的都是32.768KHz频率的晶振吗?照这么说,该函数的参数只能是32.768KHz呀。而lab里面给的却是40MHz...

  • 冬眠模块工作是在32.768KHz的。

    分享一个冬眠的代码:

    int main(void)
    {
    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x08);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);
    HibernateEnableExpClk(SysCtlClockGet());
    HibernateGPIORetentionEnable();
    SysCtlDelay(64000000);
    HibernateWakeSet(HIBERNATE_WAKE_PIN);
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, 0x00);

    HibernateRequest();
    while(1)
    {
    }
    }

    一般写得时候都这样接去写。

  • 对,我就是看到这段程序产生疑问的。

    HibernateEnableExpClk(SysCtlClockGet());

    设置40MHz时钟给休眠模式?

    改成20M或0都没有变化。不知道怎么解释

  • 看一下HibernateEnableExpClk的源码,其实没用这个参数。所以随便写的。

    这个是兼容以前老的芯片。新的芯片采用查询寄存器的方式了,不是延迟的方式。

  • 看来我还是学的不够深。。。谢谢