微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32f1与外部中断

stm32f1与外部中断

时间:10-02 整理:3721RD 点击:
新手上路,求大神指导!最近用水位传感器产生一高电平给stm32f1的某一GPIO口产生中断来控制另一GPIO口输出高低电平。但程序下载到单片机测试时,外部中断口不管高低电平都能触发中断,甚至用金属钳子触碰中断输入口导线都会触发中断。求大神指导原因!以下为程序:void GPIO_Configuration(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
                                                                                                                                
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
       
        GPIO_Init(GPIOA, &GPIO_InitStructure);        /*PA11 */
       

        GPIO_ResetBits(GPIOB,  GPIO_Pin_15 );
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void EXTI_Configuration(void)
{
  EXTI_InitTypeDef EXTI_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  EXTI_ClearITPendingBit(EXTI_Line11);
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_Line = EXTI_Line11;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);
}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);           //抢占式优先级别设置为无抢占优先级

  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;      //指定中断源
  //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;   指定占先优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //指定响应优先级别1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                //使能外部中断通道
  NVIC_Init(&NVIC_InitStructure);
                                         
}


void EXTI15_10_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line11) !=RESET)
    {
     //添加中断处理程序
         
         
         GPIO_SetBits(GPIOB , GPIO_Pin_15);
         delay_ms(1000);
     GPIO_ResetBits(GPIOB,  GPIO_Pin_15);
         delay_ms(1000);
     EXTI_ClearFlag(EXTI_Line11);                               //清除中断标志(必须)
     EXTI_ClearITPendingBit(EXTI_Line11);
         
         
     }
       
}
/*************************************************
函数: int main(void)
功能: main主函数
参数: 无
返回: 无
**************************************************/
int main(void)
{       
        RCC_Configuration();
        GPIO_Configuration();
        NVIC_Configuration();
        EXTI_Configuration();
        delay_init(72);
    while (1) ;
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top