Gast
#4003104
Hey, ich habe ein kleines problem mit den interrupts bei meinem discovery. ich habe auf 2 pins einen interrupt auf toggle gesetzt. wenn ich jetzt mit einem kabel GND verbinde, ändert eine LED die beim interrupt ausgelöst wird, leider nicht jedes mal den zustand. es scheint als würden die flanken nicht registriert werden. hier mal der code: void Configure_PB15_PB14(void) { /* Set variables used */ GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; /* Enable clock for GPIOD */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* Enable clock for SYSCFG */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Set pin as input */ GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource15); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14); EXTI_InitStruct.EXTI_Line = EXTI_Line15 | EXTI_Line14; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStruct); /* Add IRQ vector to NVIC */ /* PD0 is connected to EXTI_Line0, which has EXTI0_IRQn vector */ NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn; /* Set priority */ NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00; /* Set sub priority */ NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00; /* Enable interrupt */ NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; /* Add to NVIC */ NVIC_Init(&NVIC_InitStruct); } void EXTI15_10_IRQHandler(void) { /* Make sure that interrupt flag is set */ if (EXTI_GetITStatus(EXTI_Line15) != RESET) { /* Do your stuff when PD0 is changed */ if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)) { GPIO_WriteBit(GPIOD,GPIO_Pin_13,Bit_SET); //orange } else { GPIO_WriteBit(GPIOD,GPIO_Pin_13,Bit_RESET); } /* Clear interrupt flag */ EXTI_ClearITPendingBit(EXTI_Line15); } if (EXTI_GetITStatus(EXTI_Line14) != RESET) { /* Do your stuff when PD0 is changed */ if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)) { GPIO_WriteBit(GPIOD,GPIO_Pin_14,Bit_SET); //rot } else { GPIO_WriteBit(GPIOD,GPIO_Pin_14,Bit_RESET); } /* Clear interrupt flag */ EXTI_ClearITPendingBit(EXTI_Line14); } }