打印
[N32WBxxx]

sleep模式下无法被唤醒

[复制链接]
716|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);

使用特权

评论回复
5
probedog| | 2024-10-22 13:51 | 只看该作者
在进入sleep模式前,可能没有正确配置或使能相关的时钟,特别是与GPIO和外部中断相关的时钟。

使用特权

评论回复
6
yangxiaor520| | 2024-10-23 07:53 | 只看该作者
中断配置没有对吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝