你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
novemer 提问时间:2015-6-19 18:50 /
各位:
今天用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了。


收藏 评论11 发布时间:2015-6-19 18:50

举报

11个回答
智空小子 回答时间: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 the  EXTI line 9 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line9);
  }
wayhe 回答时间:2016-5-1 18:16:18
我也遇到这样的问题了,请问最后找到原因没有?
STM32F030  PB9和PB5配置为中断输入,没信号也老是进PB9中断,我在中断函数里加了一条将一个空闲IO口翻转指令,测试中断10uS左右进入一次。
neon1225 回答时间:2016-10-26 14:56:12
我也碰到同样的问题
anthonylee 回答时间:2018-1-26 10:43:04
我也是同样的问题。中断引脚设置为浮空,下拉 上拉都是一直进入中断,也是103C8T6
芝麻科技 回答时间:2018-6-4 16:08:54
遇到这样的问题好痛苦啊,不知道什么问题,各位解决了吗

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版