[STM32F0] PB14如何唤醒STM32F030?

[复制链接]
2258|33
 楼主| zhenykun 发表于 2021-8-8 18:06 | 显示全部楼层 |阅读模式
之前我用PB0口作唤醒键可以成功唤醒休眠后的STM32F030,因为项目需求,要改成用PB14来唤醒,但我将程序改成PB14后就唤不醒STM32F030,不知道为什么,请各位大侠指点一下
chuxh 发表于 2021-8-8 18:10 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| zhenykun 发表于 2021-8-8 18:16 | 显示全部楼层
void MCU_EnterSTOPMode(void)                                                                                                //MCU进入停机模式
{
        uint8_t temp;
    NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStruct;
        
        GPIO_SetBits(GPIOB,GPIO_Pin_13);                                                                                //熄灭工作指示灯
        
        //================================== TIM16 OFF ===========================================
        TIM_ITConfig(TIM16, TIM_IT_Update, DISABLE);
        TIM_ClearITPendingBit(TIM16, TIM_IT_Update);
        NVIC_InitStructure.NVIC_IRQChannel = TIM16_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
        NVIC_Init(&NVIC_InitStructure);
        TIM_ClearITPendingBit(TIM16, TIM_IT_Update);
        TIM_DeInit(TIM16);

        //Select HSI as system clock source
        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
        RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSI;
        
        //Wait till HSI is used as system clock source
        while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_HSI)
        {
        }

        //Disable PLL
        RCC->CR &= ~RCC_CR_PLLON;
        
        //Wait till PLL off
        while((RCC->CR & RCC_CR_PLLRDY) != 0)
        {
        }

        //Enable SYSCFG clock
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

          EXTI_ClearITPendingBit(EXTI_Line14);

        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14);
        EXTI_InitStruct.EXTI_Line = EXTI_Line14;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;                 //上升沿下降沿中断
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStruct);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);                        //开电源管理时钟
        // Request to enter STOP mode with regulator in low power mode
        PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
////////////////////////////////////////////////////////////////////////////////////
        for( temp = 10; temp != 0; temp-- );
        
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14);
        EXTI_InitStruct.EXTI_Line = EXTI_Line14;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;                 //上升沿下降沿中断
        EXTI_InitStruct.EXTI_LineCmd = DISABLE;
        EXTI_Init(&EXTI_InitStruct);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
        NVIC_Init(&NVIC_InitStructure);

    EXTI_ClearITPendingBit(EXTI_Line14);

        GPIO_ResetBits(GPIOB,GPIO_Pin_13);                                                                        //点亮工作指示灯
}
 楼主| zhenykun 发表于 2021-8-8 18:19 | 显示全部楼层
PB0和PB14是设成内部上拉输入的
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_14;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
 楼主| zhenykun 发表于 2021-8-8 18:20 | 显示全部楼层
STM32F030休眠后按下PB14对GND按键,PB13指示灯没有被点亮
supernan 发表于 2021-8-8 18:25 | 显示全部楼层
PA2和PB2
 楼主| zhenykun 发表于 2021-8-8 18:28 | 显示全部楼层
不能唤醒
 楼主| zhenykun 发表于 2021-8-8 18:30 | 显示全部楼层
只有A0或A1, B0或B1能唤醒,不知道为什么/
 楼主| zhenykun 发表于 2021-8-8 18:31 | 显示全部楼层
找到原因了,是我在中断中写错语句了,没有清到中断标志,所以PB14唤醒后就一直进出EXTI中断,无法执行正常程序。
void EXTI4_15_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0|EXTI_Line1) != RESET)
  {
    /* Clear the EXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line14);
  }
}
void EXTI4_15_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0|EXTI_Line1) != RESET)
  {
    /* Clear the EXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line14);
  }
}
更正为:
void EXTI4_15_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line14) != RESET)
  {
    /* Clear the EXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line14);
  }
}
yszong 发表于 2021-8-8 18:34 | 显示全部楼层
外部中断应该可以啊
juventus9554 发表于 2021-8-8 18:37 | 显示全部楼层
可以通过不同的方式进行唤醒 看楼主如何进行配置了
pengf 发表于 2021-8-8 18:40 | 显示全部楼层
楼主把pb14配置成什么模式了啊
heweibig 发表于 2021-8-8 18:42 | 显示全部楼层
用中断进行唤醒
 楼主| zhenykun 发表于 2021-8-8 18:44 | 显示全部楼层

唉,还是没有什么结果,算了,多谢大家啦
drer 发表于 2021-9-6 09:00 | 显示全部楼层
这个引脚有什么其他用处吗
gwsan 发表于 2021-9-6 09:01 | 显示全部楼层
能进入中断吗
tfqi 发表于 2021-9-6 09:08 | 显示全部楼层
是不是不小心复用了啊
wiba 发表于 2021-9-6 09:10 | 显示全部楼层
再换一个引脚试试看
磨砂 发表于 2021-9-7 14:35 | 显示全部楼层
是什么低功耗模式啊
八层楼 发表于 2021-9-7 14:39 | 显示全部楼层
引脚初始化那边别忘了做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

868

主题

11535

帖子

3

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