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

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
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版