进入停止模式秒退出

2019-07-20 03:53发布

本帖最后由 lowell 于 2019-2-6 20:22 编辑

参考原子哥的:http://www.openedv.com/forum.php?mod=viewthread&tid=108920
把停止模式进入从WFI换成WFE,
主函数如下:
void enter_stop_mode(void)
{
    PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFE  );
}

int main(void)
{
   u8 t=0;
   u8 key=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);    //初始化延时函数
        uart_init(115200);        //初始化串口波特率为115200
        LED_Init();                                //初始化LED  
         LCD_Init();         //液晶初始化
        KEY_Init();
        EXTIX_Init();

        LED0=1;                                        //点亮LED0
    printf(" AHB1ENR:0X%08X ",RCC->AHB1ENR);
    printf("APB1ENR:0X%08X ",RCC->APB1ENR);        
    printf("APB2ENR:0X%08X ",RCC->APB2ENR);         
        while(1)
        {            
    LED1=!LED1;
                delay_ms(100);
                printf("OK ");
        key=KEY_Scan(0);
        if(key==KEY1_PRES)
        {         
            EXTI->PR=0XFFFFF;
            enter_stop_mode();  //进入停止模式
            SystemInit();      //停止模式下HSI和HSE都关闭,故需要重新开启
            printf(" AHBENR:0X%08X ",RCC->AHB1ENR);
            printf("APB1ENR:0X%08X ",RCC->APB1ENR);        
            printf("APB2ENR:0X%08X ",RCC->APB2ENR);                                                
            t++;
            printf("t:%d ",t);        
       }
        }
}
检测到KEY1按下后系统进入停止模式,主函数只是把WFI换成WFE
第一个问题:WFE模式通过唤醒事件来唤醒,那不是要把外部或内部 EXTI 线配置为事件模式才可以??为什么中断事件也是可以唤醒的?
第二个问题:不管是把EXTI 线配置为事件模式还是中断模式,按下KEY1后系统进入停止模式,然后马上又会退出?需要再按一下KEY1才可以进入停止模式。而且如果这时候不按KEY1,而是再次按触发事件或中断的那个键,如果再按下KEY1后系统进入停止模式又会马上退出?
不解,请各位不吝指教
附工程:
停止模式.zip (5.27 MB, 下载次数: 5) 2019-2-5 17:56 上传 点击文件名下载附件




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。