PB6设置的下降沿,但是PB6上升沿和下降沿都触发中断。请帮忙看看配置有问题吗?

2019-08-16 21:43发布

本帖最后由 Anthony_brave 于 2017-7-24 16:24 编辑

PB6上升沿和下降沿都触发中断。PF7上升沿和下降沿都正常

void EXTI_Config(void)
{        
        EXTI_InitTypeDef EXTI_InitStructure;                /*¶¨òåò»¸öEXTI_InitTypeDef ààDíμĽá11ì壬Ãû×Ö½DEXTI_InitStructure*/
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ía2¿ÖD¶Ï£¬Dèòaê1ÄüAFIOê±Öó
        
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF,ENABLE);
   //======================================================         
         GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_6;                       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource6);                          
        EXTI_InitStructure.EXTI_Line = EXTI_Line6;                                                
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                              
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                             
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                                                                      
        EXTI_Init(&EXTI_InitStructure);                        
//---------------------------------------
         GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_7;                        
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                  
        GPIO_Init(GPIOF, &GPIO_InitStructure);

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOF, GPIO_PinSource7);                          
        EXTI_InitStructure.EXTI_Line = EXTI_Line7;                                               
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                                                   
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                       
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                                                                      
        EXTI_Init(&EXTI_InitStructure);                     

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                               
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                                    
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                    
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                                    
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                             
        NVIC_Init(&NVIC_InitStructure);                                                                           
}

问题已经解决,现将解决方案分享一下1、第一个问题是PB6设置的是上升沿/下降沿,结果上升沿和下降沿都触发中断。原因是:PB6处有个上拉,上拉电阻原来是100K,电阻值太大导致的,应该改为2K。
2、第二个问题是把PB6处的上拉去掉,设置下降沿触发没问题,但是设置上升沿触发,就不行。
     原因:中断函数写的有问题。
void EXTI9_5_IRQHandler(void)
{   
  unsigned char temp;
  if(EXTI_GetITStatus(EXTI_Line7) != RESET)
  {
     EXTI_ClearFlag(EXTI_Line7);                                       
     if((GPIOF->IDR & 0x0080)==0) {  return;}
     else
     {  xxxxxxxxxxxx;  }        
     EXTI_ClearITPendingBit(EXTI_Line7);
   }               
   if(EXTI_GetITStatus(EXTI_Line6) != RESET)                        
   {
     EXTI_ClearFlag(EXTI_Line6);                                       
     temp=(GPIOB->IDR & 0x0040)&0xff;                                
     if(temp==0)
    {
         XXXXXXXXX;
    }         
   EXTI_ClearITPendingBit(EXTI_Line6);
  }

}
当上升沿触发时,中断函数里的
temp=(GPIOB->IDR & 0x0040)&0xff;                                
if(temp==1)
    {  *****}

应改为
temp=(GPIOB->IDR & 0x0040)&0xff;                                
if(temp&0x0040)
    {  *****}





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
PsychoZy
1楼-- · 2019-08-16 23:17
Anthony_brave 发表于 2017-7-19 15:34
是的,中断程序里面已经加了检测PB6是不是低电平。

另外PB6这个管脚硬件电路上有个上拉,我程序配置里 ...

应该有问题,你可以再中断函数里检测PB6是不是高电平然后执行代码,我觉得可能不会执行。
你把PB6配置成浮空输入吧
Anthony_brave
2楼-- · 2019-08-17 00:34
 精彩回答 2  元偷偷看……
564646396
3楼-- · 2019-08-17 04:16
有可能是抖动的原因  CPU处理太快  
wxjhby
4楼-- · 2019-08-17 08:47
如果是检测按键计数,是要消抖的
Anthony_brave
5楼-- · 2019-08-17 13:03
wxjhby 发表于 2017-7-19 13:58
如果是检测按键计数,是要消抖的

外部触发脉冲是7.5hz。
我尝试在中断内部加10ms延时,但是整个程序都被影响的不能正常工作了。
Anthony_brave
6楼-- · 2019-08-17 18:31
564646396 发表于 2017-7-19 13:47
有可能是抖动的原因  CPU处理太快

加上延时消抖 影响其他程序运行

一周热门 更多>