OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5013|回复: 4

stm32 f103低功耗唤醒实验疑问

[复制链接]

3

主题

5

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2017-5-26
在线时间
2 小时
发表于 2017-5-26 17:16:45 | 显示全部楼层 |阅读模式
2金钱
void EXTI0_IRQHandler(void)
{                                                                                                  
        EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中断标志位                  
        if(Check_WKUP())//关机?
        {                  
                Sys_Enter_Standby();  
        }
}
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{       
    GPIO_InitTypeDef  GPIO_InitStructure;                    
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟

        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;         //PA.0
        GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);        //初始化IO
    //使用外部中断方式
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);        //中断线0连接GPIOA.0

    EXTI_InitStructure.EXTI_Line = EXTI_Line0;        //设置按键所有的外部线路
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                        //设外外部中断模式:EXTI线路为中断请求
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //上升沿触发
           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);        // 初始化外部中断

        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键所在的外部中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级2级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
        NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

        if(Check_WKUP()==0) Sys_Standby();    //问题:在此时按wake_up键时为什么不会同时引起中断,导致关机
}
问题:在void WKUP_Init(void)内按wake_up键时为什么不会同时引起中断,导致关机

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2017-5-26
在线时间
2 小时
 楼主| 发表于 2017-5-27 08:37:12 来自手机 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-5-27 18:55:48 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2018-9-15
在线时间
37 小时
发表于 2019-5-1 11:04:51 | 显示全部楼层
因为在低功耗下,不会触发中断
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-7-26
在线时间
8 小时
发表于 2021-7-5 18:15:34 | 显示全部楼层
这个我不是十分确定,刚刚看到这个实验,这个问题从逻辑上看,中断此时已经是生效的,主函数里分组也完成了,这个初始化里执行到 if(Check_WKUP()==0) Sys_Standby(); 这步时中断也配置完毕了,所以应该是生效;正常关机时候是没什么疑问的,唤醒的时候,长按wake_up,唤醒程序(上升沿已经用过了),这个时候进入初始化,注意初始化中:EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //上升沿触发,这个时候长按是wake_up是高电平,所以不触发中断;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 05:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表