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.
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的。
分享一个冬眠的代码:
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的源码,其实没用这个参数。所以随便写的。
这个是兼容以前老的芯片。新的芯片采用查询寄存器的方式了,不是延迟的方式。