好的,试下,唤醒后再重新配置时钟。我是这样使用的。
int main(void)
{
......
LCD_Init();
RTC_Init(); //RTC定时唤醒停止模式下的单片机
ADC_Init();
......
while (1)
{
...... if(采集数据=1)
{
采集数据=0;
采集完成=0;
EnableADC();
}
......
if(采集完成=1)
{
采集完成=0;
DisableADC();
}
......
if(无数据采集)
{
__WFI();
}
}
}
又看了下参考手册,进入停止模式后,所有高速时钟都停止。退出停止模式时保持其相应配置,我使用的是HSI16。 本帖最后由 Tcreat 于 2018-2-9 11:39 编辑
wgcrdg 发表于 2018-2-9 11:04
又看了下参考手册,进入停止模式后,所有高速时钟都停止。退出停止模式时保持其相应配置,我使用的是HSI16 ...
是保持配置,你可以不重新配置时钟, 但是相应外设的时钟还是需要自己开启的 , 本帖最后由 wgcrdg 于 2018-2-9 12:01 编辑
我在开始初始化的程序中,外设时钟打开,进入停止模式时,没有关闭相应的外设时钟,刚才我试了下,进入停止模式时,关闭相应外设时钟,退出停止模式时,打开相应外设时钟,电流是一样的, 我的RTC+LCD时,停止模式时,电流是28 uA,不知道你们可以最低降到多少。我也感觉电流大了,但是降不下来了。
//程序完成后将调试线置为模拟
GPIOA->MODER |= (GPIO_MODER_MODE13 |GPIO_MODER_MODE14);
//禁止 PVD 电源电压检测器
CLEAR_BIT(PWR->CR, PWR_CR_PVDE);
//使超低功率模式 VREFINT 在低功耗模式下关闭
//SET_BIT(PWR->CR, PWR_CR_ULP);
//从超低功率模式使快醒来
SET_BIT(PWR->CR, PWR_CR_FWU);
//(HSI) 振荡器作为从停止模式唤醒时钟
MODIFY_REG(RCC->CFGR,RCC_CFGR_STOPWUCK, (uint32_t)(RCC_CFGR_STOPWUCK) );
RCC->CFGR |= RCC_CFGR_STOPWUCK;//(HSI) 振荡器作为从停止模式唤醒时钟
//CLEAR_BIT(PWR->CR, PWR_CR_LPRUN);
CLEAR_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPSDSR |PWR_CR_LPRUN));//清除标志
SET_BIT(PWR->CR, (PWR_CR_LPSDSR|PWR_CR_LPRUN));//设置标志低功率运行模式下调压器进入低功耗模式
// SET_BIT(PWR->CR, PWR_CR_LPRUN);
SET_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk);
SET_BIT(SCB->SCR, SCB_SCR_SLEEPONEXIT_Msk);
__WFI();
你可以用Jlink调试看看哪里的问题,看看时钟有没有再次打开,或者ADC转换有没有延时 学习~~~~~~~~~~ 楼主 后来搞定了没
页:
1
[2]