搜索
bottom↓
回复: 0

stm32f103四路外部中断唤醒 其中一路不唤醒问题

[复制链接]

出0入0汤圆

发表于 2020-11-5 10:12:57 | 显示全部楼层 |阅读模式
本帖最后由 qiancuit2012 于 2020-11-5 10:37 编辑

请教下 配置了4路外部中断唤醒,但是其中的PD2 无法唤醒,测量是有上升沿波形的数据,其他三路都正常


void exit_run_system(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
   
                //GPIOA.3          中断线以及中断初始化配置 下降沿触发 //KEY
                GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_3;            //PA3 上拉输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);   
               
   
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);
          EXTI_InitStructure.EXTI_Line=EXTI_Line3;
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising  EXTI_Trigger_Falling
          EXTI_Init(&EXTI_InitStructure);       
               
          //GPIOC.5          中断线以及中断初始化配置 上降沿触发 //IN 外部输入
                GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;            //PC5 浮空输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
               
                 
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
          EXTI_InitStructure.EXTI_Line=EXTI_Line5;
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising  EXTI_Trigger_Falling
          EXTI_Init(&EXTI_InitStructure);                  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
               
                //GPIOB.10          中断线以及中断初始化配置 上降沿触发 //IN 外部输入
                GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10;            //PB10 浮空输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
               
                 
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource10);
          EXTI_InitStructure.EXTI_Line=EXTI_Line10;
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising  EXTI_Trigger_Falling
          EXTI_Init(&EXTI_InitStructure);                  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
       
                //GPIOD.2          中断线以及中断初始化配置 上降沿触发 //IN USB输入
                GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;            //PD2 浮空输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
               
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource2);
          EXTI_InitStructure.EXTI_Line=EXTI_Line2;
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising  EXTI_Trigger_Falling
          EXTI_Init(&EXTI_InitStructure);                  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
               
                //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

                NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;            //GPIO2  所在的中断
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;   
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;        
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                           
                NVIC_Init(&NVIC_InitStructure);
       
   
    NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;            //GPIO3  所在的中断
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;   
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;        
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                           
                NVIC_Init(&NVIC_InitStructure);

                NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                        //使能按键所在的外部中断通道
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //抢占优先级2,
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;                                        //子优先级1
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
          NVIC_Init(&NVIC_InitStructure);
               
                NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                        //使能按键所在的外部中断通道
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;        //抢占优先级2,
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;                                        //子优先级1
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //使能外部中断通道
          NVIC_Init(&NVIC_InitStructure);
}
void EXTI9_5_IRQHandler(void)
{
    delay_ms(10);//消抖
   
    if(EXTI_GetITStatus(EXTI_Line5) != RESET)     //检查指定的EXTI5线路触发请求发生与否
    {
                        EXTI_ClearITPendingBit(EXTI_Line5);  //清除EXTI5线路挂起位
                        EXTI_ClearFlag(EXTI_Line5);          //清楚EXTI5线路挂起标志位
                        exit_delete();
                        board_init();
                        myprintf("checkin ent exit 5\n");
                        keyFlag.press=1;
    }
}
void EXTI15_10_IRQHandler(void)
{
    delay_ms(10);//消抖
   
    if(EXTI_GetITStatus(EXTI_Line10) != RESET)     //检查指定的EXTI5线路触发请求发生与否
    {
                        EXTI_ClearITPendingBit(EXTI_Line10);  //清除EXTI10线路挂起位
                        EXTI_ClearFlag(EXTI_Line10);          //清楚EXTI10线路挂起标志位
                        exit_delete();
                        board_init();
                        myprintf("ir person ent exit 10\n");
    }
}
void EXTI3_IRQHandler(void)
{
    delay_ms(10);//消抖
   
    if(EXTI_GetITStatus(EXTI_Line3) != RESET)     //检查指定的EXTI3线路触发请求发生与否
    {
                        EXTI_ClearITPendingBit(EXTI_Line3);  //清除EXTI3线路挂起位
                        EXTI_ClearFlag(EXTI_Line3);          //清楚EXTI3线路挂起标志位
                        exit_delete();
                        board_init();
                        myprintf("key ent exit 3\n");
                        keyFlag.press=1;
                        while(KEY1==KEY_PRESS){
                        }
    }
}
void EXTI2_IRQHandler(void)
{
    delay_ms(10);//消抖
   
    if(EXTI_GetITStatus(EXTI_Line2) != RESET)     //检查指定的EXTI2线路触发请求发生与否
    {
                        EXTI_ClearITPendingBit(EXTI_Line2);  //清除EXTI2线路挂起位
                        EXTI_ClearFlag(EXTI_Line2);          //清楚EXTI2线路挂起标志位
                        exit_delete();
                        board_init();
                        myprintf("usb ent exit 2\n");
    }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 21:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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