novemer 发表于 2015-6-19 18:50:49

stm32 pb口 外部中断一直触发的问题

各位:
今天用stm32f103c8遇到一个奇怪的问题,我用pb1和5两个外部引脚做外部中断,都是上升沿触发。但是使能中断后,pb5一直进中断,挂起标志清了之后不知道在哪由置1了 不知道有没有同学遇到相同的问题。

下面是我的代码:
//初始化代码:
      GPIO_InitTypeDef GPIO_InitStructure;
      EXTI_InitTypeDef EXTI_InitStructure;
      NVIC_InitTypeDef NVIC_InitStructure;
      
//         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;      
//   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;      
//   GPIO_Init(GPIOB, &GPIO_InitStructure);
      
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;      
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;      
GPIO_Init(GPIOB, &GPIO_InitStructure);
      
//         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource5);
      
//         EXTI_InitStructure.EXTI_Line = EXTI_Line1;
//         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
//         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
//         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
//          EXTI_Init(&EXTI_InitStructure);
      
      EXTI_InitStructure.EXTI_Line = EXTI_Line5;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure);
      EXTI_GenerateSWInterrupt(EXTI_Line5);
      
//         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//         NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
//         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//         NVIC_Init(&NVIC_InitStructure);
      
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);


//中断服务函数:
void EXTI9_5_IRQHandler(void)
{
      
      EXTI->IMR &= ~EXTI_Line5;
      EXTI_ClearITPendingBit(EXTI_Line5);
      
      EXTI->IMR |= EXTI_Line5;
}


终端服务函数中关中断和清标志位都是对的,但是出来之后挂起标志就又置1了。


智空小子 发表于 2019-6-21 22:28:09

今天也遇到这个问题,STM32F103C8T6,示波器测试外部无触发,但还是无故进中断

呦、小魔 发表于 2015-11-16 20:59:16

问题解决了吗?外接一个下拉电阻试一下

你好我好大家好! 发表于 2015-6-20 09:13:00

帮顶                     

creep 发表于 2015-6-20 10:57:36

要么没有正确的清楚中断标志,要么有外部中断一直产生,使用示波器看下这个引脚的电平是否一直在变化!

novemer 发表于 2015-6-20 23:57:27

creep 发表于 2015-6-20 10:57
要么没有正确的清楚中断标志,要么有外部中断一直产生,使用示波器看下这个引脚的电平是否一直在变化! ...

真的清除了,而且真的外部没有触发。
我在内存里能看到,进入中断函数后先关中断,然后清标志,然后再开中断。
外部引脚一直是低电平,我设置的是上升沿触发,也没问题啊。

jacobfeng 发表于 2015-6-21 13:49:57

支持一下

紫嫣0302 发表于 2015-11-25 14:06:45

解决没,若没有,就先检查引脚状态是否一直有变化,若没有就试试例子中断函数写法。
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
    /* Toggle LED2 */
   STM_EVAL_LEDToggle(LED2);

    /* Clear theEXTI line 9 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line9);
}

wayhe 发表于 2016-5-1 18:16:18

我也遇到这样的问题了,请问最后找到原因没有?
STM32F030PB9和PB5配置为中断输入,没信号也老是进PB9中断,我在中断函数里加了一条将一个空闲IO口翻转指令,测试中断10uS左右进入一次。

neon1225 发表于 2016-10-26 14:56:12

我也碰到同样的问题

anthonylee 发表于 2018-1-26 10:43:04

我也是同样的问题。中断引脚设置为浮空,下拉 上拉都是一直进入中断,也是103C8T6
页: [1] 2
查看完整版本: stm32 pb口 外部中断一直触发的问题