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

各位大佬,关于PC13 PC14 PC15作为外部中断输入口,频繁进入中断的问题

[复制链接]
郭长余 提问时间:2021-6-28 12:39 / 未解决
void PC13_14_15_Gpio(void)//PC13  PC14  PC15配置为普通IO浮空外部上拉输入
{
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE );
PWR_BackupAccessCmd( ENABLE );/* 允许修改RTC和后备寄存器*/
RCC_LSEConfig( RCC_LSE_OFF ); /* 关闭外部低速时钟,PC14+PC15可以用作普通IO*/
BKP_TamperPinCmd(DISABLE); /* 关闭入侵检测功能,PC13可以用作普通IO*/

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //外部上拉,浮空输入
GPIO_Init(GPIOC, &GPIO_InitStructure);

PWR_BackupAccessCmd(DISABLE);/* 禁止修改RTC和后备寄存器*/
//BKP_ITConfig(DISABLE); ? ? ? /* 禁止TAMPER 中断*/
}
void EXTI0_Config(void)//外部中断配置
{
  /* Enable GPIOA clock */
       
        GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        NVIC_InitTypeDef NVIC_InitStructure;
       
        EXTI_InitTypeDef EXTI_InitStructure;
        EXTI_InitStructure.EXTI_Line = EXTI_Line13|EXTI_Line14|EXTI_Line15;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15);


        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void        EXTI15_10_IRQHandler(void)  //即使PC13  PC14  PC15电平没有变化,也一直进中断
  {
          if(EXTI_GetITStatus(EXTI_Line13|EXTI_Line14|EXTI_Line15)!=RESET)//
            {

           EXTI_ClearITPendingBit(EXTI_Line13|EXTI_Line14|EXTI_Line15); //即使PC13  PC14  PC15脚电平没有变化,也一直进外部中断
                }
}

各位大佬,我这个是用PC13  PC14  PC15作为外部中断输入口的配置,有外部上拉电阻,为什么会一直进中断,即使外部电平没有变化

收藏 评论8 发布时间:2021-6-28 12:39

举报

8个回答
废鱼 回答时间:2021-6-28 13:46:31

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15);
注意这句代码,GPIO_PinSource15不是位的关系。
jundao721 回答时间:2021-6-28 14:29:31
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15); 这句后边分开分别定义。GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource14);
郭长余 回答时间:2021-6-28 14:38:58
飞羽一条 发表于 2021-6-28 13:46
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15);
注 ...

谢谢,等后面试试
郭长余 回答时间:2021-6-28 14:39:20
jundao721 发表于 2021-6-28 14:29
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15); 这句 ...

好的,谢谢,等后面试试
yklstudent 回答时间:2021-6-28 15:15:49
先单个测试确认是否能工作再说吧

lizhengwen52 回答时间:2021-6-29 09:38:11
我的初始化程序供参考。   
EXTI_ClearITPendingBit(EXTI_Line6);
          EXTI_ClearITPendingBit(EXTI_Line7);
          EXTI_ClearITPendingBit(EXTI_Line8);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);
    EXTI_InitStructure.EXTI_Line = EXTI_Line6 | EXTI_Line7 | EXTI_Line8;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

void EXTI9_5_IRQHandler()
{
          TIM_CtrlPWMOutputs(TIM1, DISABLE);       
    if(EXTI_GetITStatus(EXTI_Line6)==1)
    EXTI_ClearITPendingBit(EXTI_Line6);//Clear Interrupt Flag
               
                if(EXTI_GetITStatus(EXTI_Line7)==1)
    EXTI_ClearITPendingBit(EXTI_Line7);//Clear Interrupt Flag
                               
          if(EXTI_GetITStatus(EXTI_Line8)==1)
    EXTI_ClearITPendingBit(EXTI_Line8);//Clear Interrupt Flag       
                Hall_SW();
                EXTI1TickCnt3++;
}

lizhengwen52 回答时间:2021-6-29 09:46:57
lizhengwen52 发表于 2021-6-29 09:38
我的初始化程序供参考。   
EXTI_ClearITPendingBit(EXTI_Line6);
          EXTI_ClearITPendingBit(EXTI_Line7) ...

之前出现过频繁进入中断的问题,进入中断后把标志位清掉就可以了。
xmshao 回答时间:2021-6-29 10:50:44
你能否告知下大家你使用的STM32完整型號否,這個有時可能很關鍵。

所属标签

相似问题

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