WXMZzhtt 发表于 2024-9-27 13:01

sleep模式下无法被唤醒

请问N32WB03 在进入sleep之前,配置了外部中断,但是sleep了之后外部中断唤不醒,进不去对应的中断服务函数是什么原因,
代码:
{
        LEDInit(GPIOB,GPIO_PIN_2);
        KeyInputExtiInit(KEY_INPUT_PORT, KEY_INPUT_PIN);

                /* Enable PWR Clock */
      RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);      
      //enter sleep
      PWR_EnterSLEEPMode(PWR_SLEEPENTRY_WFI);       
}

void KeyInputExtiInit(GPIO_Module* GPIOx, uint16_t Pin)
{
    GPIO_InitType GPIO_InitStructure;
    EXTI_InitType EXTI_InitStructure;
    NVIC_InitType NVIC_InitStructure;

    /* Check the parameters */
    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

    /* Enable the GPIO Clock */
    if (GPIOx == GPIOA)
    {
      RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO, ENABLE);
    }
    else if (GPIOx == GPIOB)
    {
      RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB /*| RCC_APB2_PERIPH_AFIO*/, ENABLE);
    }
    else
    {
      return;
    }

    /*Configure the GPIO pin as input floating*/
    if (Pin <= GPIO_PIN_ALL)
    {
      GPIO_InitStruct(&GPIO_InitStructure);
      GPIO_InitStructure.Pin          = Pin;
                GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_INPUT;
      GPIO_InitStructure.GPIO_Pull    = GPIO_NO_PULL;
      GPIO_InitPeripheral(GPIOx, &GPIO_InitStructure);
    }

    /*Configure key EXTI Line to key input Pin*/
    GPIO_ConfigEXTILine(KEY_INPUT_PORT_SOURCE, KEY_INPUT_PIN_SOURCE);

    /*Configure key EXTI line*/
    EXTI_InitStructure.EXTI_Line    = KEY_INPUT_EXTI_LINE;
    EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_InitPeripheral(&EXTI_InitStructure);

    /*Set key input interrupt priority*/
    NVIC_InitStructure.NVIC_IRQChannel                   = KEY_INPUT_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPriority         = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

suncat0504 发表于 2024-9-30 14:44

你先试试加上定时中断(定时中期长一些,避免刚进入睡眠就被唤醒)。看看能不能自动唤醒。然后再确认,是不是外部中断的设置不正确。定时中断触发LED亮灭,这样更便于观察。

suncat0504 发表于 2024-9-30 14:56

对了,你可以先利用LED,验证外部中断是不是起作用了,然后再去测试中断唤醒功能。

d2006p 发表于 2024-10-22 10:43

LedOn(LED1_PORT, LED1_PIN);
      delay(3000);
      LedOff(LED1_PORT, LED1_PIN);
      
      /* Enable PWR Clock */
      RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);
      
      //enter sleep
      PWR_EnterSLEEPMode(PWR_SLEEPENTRY_WFI);//PWR_SLEEPENTRY_WFI
      
      //exit sleep
      LEDInit(LED1_PORT, LED1_PIN);
      KeyInputExtiInit(KEY_INPUT_PORT, KEY_INPUT_PIN);

probedog 发表于 2024-10-22 13:51

在进入sleep模式前,可能没有正确配置或使能相关的时钟,特别是与GPIO和外部中断相关的时钟。

yangxiaor520 发表于 2024-10-23 07:53

中断配置没有对吧
页: [1]
查看完整版本: sleep模式下无法被唤醒