停机模式唤醒:F103C8T6先将PA0挂在EXTI0线上通过按下PA0进入停机模式但按一下PA0没有唤醒

2019-07-14 18:32发布



LZ用的是F103C8T6,先将PA0挂在EXti0线上,然后通过按下PA0进入停机模式,停机模式唤醒的条件是任意EXTI线,所以如果我再按一下PA0就会唤醒,但实际操作中并不可以。不知道是理解错了还是程序的问题,求大佬们指点。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
xiaoge240
2019-07-16 14:39
TOPCB 发表于 2018-8-16 10:36
进入STOP模式之前,重新配置一下对应IO时钟、中断配置。

void Sys_Enter_Standby(void)   
{               
       
        SystemInit();

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);        /* 84MHZ*/
               

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_SYSCFG, ENABLE);


        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOA, ENABLE);               

        KEY_Init();   //这个是配置按键IO口的函数
        EXTI_Configuration();        //这个是配置中断的函数
                       
        printf("停机,重新配置");
  delay_ms(50);
        RCC_AHB1PeriphResetCmd(0X04FF,ENABLE);//复位所有IO口
       
//        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟                 
         
//        PWR_BackupAccessCmd(ENABLE);//后备区域访问使能

        RTC_ITConfig(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA,DISABLE);//关闭RTC相关中断,可能在RTC实验打开了。
        RTC_ClearITPendingBit(RTC_IT_TS|RTC_IT_WUT|RTC_IT_ALRB|RTC_IT_ALRA);//清楚RTC相关中断标志位。

        EXTI_ClearITPendingBit(EXTI_Line0);
        EXTI_ClearITPendingBit(EXTI_Line13);
        EXTI_ClearITPendingBit(EXTI_Line2);       
       
//        PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 标志
//       
//        PWR_WakeUpPinCmd(ENABLE);//设置WKUP用于唤醒
       
//        PWR_EnterSTANDBYMode();        //进入待机模式
       
        PWR_EnterSTOPMode(PWR_Regulator_ON,PWR_STOPEntry_WFI);
       
        SystemInit();        
         
}

一周热门 更多>