打印
[STM32F0]

PB14如何唤醒STM32F030?

[复制链接]
1792|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);

使用特权

评论回复
5
zhenykun|  楼主 | 2021-8-8 18:20 | 只看该作者
STM32F030休眠后按下PB14对GND按键,PB13指示灯没有被点亮

使用特权

评论回复
6
supernan| | 2021-8-8 18:25 | 只看该作者
PA2和PB2

使用特权

评论回复
7
zhenykun|  楼主 | 2021-8-8 18:28 | 只看该作者
不能唤醒

使用特权

评论回复
8
zhenykun|  楼主 | 2021-8-8 18:30 | 只看该作者
只有A0或A1, B0或B1能唤醒,不知道为什么/

使用特权

评论回复
9
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);
  }
}

使用特权

评论回复
10
yszong| | 2021-8-8 18:34 | 只看该作者
外部中断应该可以啊

使用特权

评论回复
11
juventus9554| | 2021-8-8 18:37 | 只看该作者
可以通过不同的方式进行唤醒 看楼主如何进行配置了

使用特权

评论回复
12
pengf| | 2021-8-8 18:40 | 只看该作者
楼主把pb14配置成什么模式了啊

使用特权

评论回复
13
heweibig| | 2021-8-8 18:42 | 只看该作者
用中断进行唤醒

使用特权

评论回复
14
zhenykun|  楼主 | 2021-8-8 18:44 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
15
drer| | 2021-9-6 09:00 | 只看该作者
这个引脚有什么其他用处吗

使用特权

评论回复
16
gwsan| | 2021-9-6 09:01 | 只看该作者
能进入中断吗

使用特权

评论回复
17
tfqi| | 2021-9-6 09:08 | 只看该作者
是不是不小心复用了啊

使用特权

评论回复
18
wiba| | 2021-9-6 09:10 | 只看该作者
再换一个引脚试试看

使用特权

评论回复
19
磨砂| | 2021-9-7 14:35 | 只看该作者
是什么低功耗模式啊

使用特权

评论回复
20
八层楼| | 2021-9-7 14:39 | 只看该作者
引脚初始化那边别忘了做

使用特权

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

本版积分规则

868

主题

11535

帖子

3

粉丝