打印
[STM32F1]

PA11 PA12 用外中断,为什么低电平就一直有中断?

[复制链接]
1143|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ihafd|  楼主 | 2019-12-4 23:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下程序:
         // ************************* PA11 PA12 按键中断配置
         
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟                        
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;   // PA11 床1按键   PA12 床2按键
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;       //; GPIO_Mode_IPU
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);

    //GPIOA. PA11 PA12          中断线以及中断初始化配置
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource11);
          EXTI_InitStructure.EXTI_Line=EXTI_Line11;
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);                  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
               
                NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                        //
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;        //抢占优先级
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                                        //子优先级
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //
          NVIC_Init(&NVIC_InitStructure);                       
               
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource12);
          EXTI_InitStructure.EXTI_Line=EXTI_Line12;
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);                  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器               
               
                NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                        //
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        //抢占优先级
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                        //子优先级
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                //
          NVIC_Init(&NVIC_InitStructure);       


/****************************************按键中断*************************************/
void EXTI15_10_IRQHandler(void)
{                 
                if(EXTI_GetITStatus(EXTI_Line11) !=RESET) //PA11 确认有中断
                {
                           Key1_Scan_EN = 1;
                                 EXTI_ClearITPendingBit(EXTI_Line11);  //清除LINE11线路挂起位                       
                }
                if(EXTI_GetITStatus(EXTI_Line12) !=RESET)  //PA12 确认有中断
                {
                                 Key2_Scan_EN = 1;          
                                 EXTI_ClearITPendingBit(EXTI_Line12);  //清除LINE12线路挂起位                       
                }
}


不管配置成:EXTI_Trigger_Falling 或EXTI_Trigger_Rising或  EXTI_Trigger_Rising_Falling 只要PA11 或PA12有是低电平,就下直进行中断。
为什么这样的?试无数次了。
为什么啊?

谢谢!谢谢!

使用特权

评论回复
沙发
zhuotuzi| | 2019-12-4 23:58 | 只看该作者
不清楚,一般在回调函数里进行处理吧。

使用特权

评论回复
板凳
zhuotuzi| | 2019-12-4 23:58 | 只看该作者
你这是用的哪个芯片,我去看看

使用特权

评论回复
地板
zhuotuzi| | 2019-12-4 23:58 | 只看该作者
先下载F1的cubeF 1,看看提供的例子是怎么操作中断的。

使用特权

评论回复
5
sonicll| | 2019-12-5 08:46 | 只看该作者
示波器看看信号线上有没有毛刺

使用特权

评论回复
6
ihafd|  楼主 | 2019-12-5 22:26 | 只看该作者
电源不稳造成的。查出来了。谢谢大家。

使用特权

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

本版积分规则

292

主题

851

帖子

3

粉丝