[N32WBxxx] sleep模式下无法被唤醒

[复制链接]
 楼主| WXMZzhtt 发表于 2024-9-27 13:01 | 显示全部楼层 |阅读模式
请问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 来自手机 | 显示全部楼层
中断配置没有对吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部