#include "stm32f4xx.h" #include "stm32f4xx_rcc.c" #include "stm32f4xx_gpio.c" #include "stm32f4xx_exti.c" #include "stm32f4xx_syscfg.c" #include "LCD2x16.c" int IRQcounter = 0; // declare & initialize IRQ counter void SWITCHinit (void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOE, &GPIO_InitStructure); } void IRQinit_PE5 (void) { //EXTIMode_TypeDef EXTIMode_TypeStructure; //EXTITrigger_TypeDef EXTITrigger_TypeStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource5); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3); EXTI_InitStructure.EXTI_Line = EXTI_Line5; EXTI_InitStructure.EXTI_Line |= EXTI_Line3; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStructure); } void main (void){ LCD_init(); // init LCD LCD_string("IRQs at PE5:", 0x00); // display title string SWITCHinit(); IRQinit_PE5(); NVIC_EnableIRQ(EXTI9_5_IRQn); // Enable IRQ for ext. signals, lines 9 to 5 NVIC_EnableIRQ(EXTI3_IRQn); // Enable IRQ for ext. signals, lines 3 while (1) { LCD_uInt16(IRQcounter,0x40,1); // write IRQ count to LCD for (int i = 0; i<100000; i++) {}; // waste some time }; } void EXTI9_5_IRQHandler (void) { IRQcounter++; // do the actual work EXTI_ClearITPendingBit(EXTI_Line5); EXTI_ClearFlag(EXTI_Line5); } void EXTI3_IRQHandler (void) { IRQcounter++; // do the actual work IRQcounter++; // do the actual work EXTI_ClearITPendingBit(EXTI_Line3); EXTI_ClearFlag(EXTI_Line3); }