//外部中断初始化程序 //初始化PE2~4,PA0为中断输入. void EXTIX_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; LED_Init(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource2);//PE2 连接到中断线2 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource3);//PE3 连接到中断线3 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);//PE4 连接到中断线4 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PA0 连接到中断线0 /* 配置EXTI_Line0 */ EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE0 EXTI_Init(&EXTI_InitStructure);//配置 /* 配置EXTI_Line2,3,4 */ EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能 EXTI_Init(&EXTI_InitStructure);//配置 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;//外部中断4 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;//抢占优先级1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 }
/**************************************************************************************** ** 函数名称: ButtonInit ** 功能描述: EABox 使用的各按钮的初始化 ** 参 数: none ** 返 回 值: none ** 作 者: Sevent ** 日 期: 2013年07月22日 **--------------------------------------------------------------------------------------- ** 修 改 人: ** 日 期: **-------------------------------------------------------------------------------------- ****************************************************************************************/ void ButtonInit(void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* 配置A3 脚为物理开关和WPS 功能开关(长按) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 配置B9 脚为软重启开关和恢复出厂 功能开关(长按) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource3); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource9); /* Configure EXTI Line3 */ EXTI_InitStructure.EXTI_Line = EXTI_Line3; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Configure EXTI Line9 */ EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* 设定外部中断3 的中断优先级 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* 设定外部中断5-9 的中断优先级 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0E; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
static void gpio_init() { GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); gpio.GPIO_Mode = GPIO_Mode_AF; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; gpio.GPIO_Pin = SX1276_CFG_SPI_SCK | SX1276_CFG_SPI_MISO | SX1276_CFG_SPI_M0SI; GPIO_Init(SX1276_CFG_SPI_LINE, &gpio); GPIO_PinAFConfig(SX1276_CFG_SPI_LINE, SX1276_CFG_GPIO_AF_SCK, SX1276_CFG_GPIO_AF); GPIO_PinAFConfig(SX1276_CFG_SPI_LINE, SX1276_CFG_GPIO_AF_MISO, SX1276_CFG_GPIO_AF); GPIO_PinAFConfig(SX1276_CFG_SPI_LINE, SX1276_CFG_GPIO_AF_M0SI, SX1276_CFG_GPIO_AF); gpio.GPIO_Mode = GPIO_Mode_OUT; gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_UP; gpio.GPIO_Pin = SX1276_CFG_SPI_SEL_PIN; GPIO_Init(SX1276_CFG_SPI_SEL_LINE, &gpio); gpio.GPIO_Mode = GPIO_Mode_IN; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; gpio.GPIO_Pin = SX1276_CFG_EXTI_PIN_DIO_0; GPIO_Init(SX1276_CFG_EXTI_GPIO_DIO_0, &gpio); gpio.GPIO_Mode = GPIO_Mode_IN; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_PuPd = GPIO_PuPd_DOWN; gpio.GPIO_Pin = SX1276_CFG_EXTI_PIN_DIO_1; GPIO_Init(SX1276_CFG_EXTI_GPIO_DIO_1, &gpio); SYSCFG_EXTILineConfig(SX1276_CFG_SYSCFG_PORT_DIO_0, SX1276_CFG_SYSCFG_PIN_DIO_0); SYSCFG_EXTILineConfig(SX1276_CFG_SYSCFG_PORT_DIO_1, SX1276_CFG_SYSCFG_PIN_DIO_1); GPIO_ResetBits(SX1276_CFG_SPI_LINE, SX1276_CFG_SPI_SCK | SX1276_CFG_SPI_MISO | SX1276_CFG_SPI_M0SI); }
/** * @brief Configures EXTI Line15 (connected to PG15 pin) in interrupt mode * @param None * @retval None */ static void EXTILine13_15_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; #ifdef USE_STM324x9I_EVAL /* Enable GPIOC clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); #else /* Enable GPIOG clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); #endif /* USE_STM324x9I_EVAL */ /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure PG15 pin as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; #ifdef USE_STM324x9I_EVAL GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_Init(GPIOC, &GPIO_InitStructure); #else GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_Init(GPIOG, &GPIO_InitStructure); #endif /* USE_STM324x9I_EVAL */ /* Connect EXTI Line15 to PG15 pin */ #ifdef USE_STM324x9I_EVAL SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13); #else SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG, EXTI_PinSource15); #endif /* USE_STM324x9I_EVAL */ /* Configure EXTI Line15 */ #ifdef USE_STM324x9I_EVAL EXTI_InitStructure.EXTI_Line = EXTI_Line13; #else EXTI_InitStructure.EXTI_Line = EXTI_Line15; #endif /* USE_STM324x9I_EVAL */ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI15_10 Interrupt to the lowest priority */ 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 Initialize_GPIO() { GPIO_InitTypeDef IO0,INITGPIO_E; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; IO0.GPIO_Pin=GPIO_Pin_5; IO0.GPIO_Mode=GPIO_Mode_IN; IO0.GPIO_OType=GPIO_OType_PP; IO0.GPIO_PuPd=GPIO_PuPd_DOWN; GPIO_Init(GPIOD, &IO0); IO0.GPIO_Pin=GPIO_Pin_10; IO0.GPIO_Mode=GPIO_Mode_IN; IO0.GPIO_OType=GPIO_OType_PP; IO0.GPIO_PuPd=GPIO_PuPd_DOWN; GPIO_Init(GPIOC, &IO0); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource5); 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); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource10); EXTI_InitStructure.EXTI_Line = EXTI_Line10; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //CONFIGURE EXTI NVIC TO LEAST PRIORITY NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //general output for LEDS INITGPIO_E.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; INITGPIO_E.GPIO_Mode=GPIO_Mode_OUT; INITGPIO_E.GPIO_Speed=GPIO_Speed_50MHz; INITGPIO_E.GPIO_OType=GPIO_OType_PP; INITGPIO_E.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOE,&INITGPIO_E); }
//初始化PD6,PE2~4为中断输入 void EXTIX_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; init_button();//按键对应的 IO 口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能 SYSCFG 时钟 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2); //PE2 连接线 2 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3); //PE3 连接线 3 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4); //PE4 连接线 4 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource6); //PD6 连接线 6 /* 配置 EXTI_Line6 */ EXTI_InitStructure.EXTI_Line = EXTI_Line6; //LINE0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能 LINE0 EXTI_Init(&EXTI_InitStructure); /* 配置 EXTI_Line2,3,4 */ EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //中断线使能 EXTI_Init(&EXTI_InitStructure); //配置 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //外部中断 0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0x01; //抢占优先级 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //响应优先级 2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //配置 NVIC NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //外部中断 2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //响应优先级 2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //配置 NVIC NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //外部中断 3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03; //抢占优先级 3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //响应优先级 2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //配置 NVIC NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; //外部中断 4 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x04; //抢占优先级 4 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //响应优先级 2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //配置 NVIC }
void arch_ExtIrqRxConf(uint_t nPort, uint_t nPin) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); switch (nPort) { case 0: SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, nPin ); break; case 1: SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, nPin ); break; } }
/** * @brief Configure (PE8 and PE9) or PG8 in interrupt mode * @param None * @retval None */ void EXTI9_5_Config(void) { /* Configure (PE8 and PE9) or PG8 pin as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; #if defined USE_STM32L152_EVAL /* Enable GPIOE clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_Init(GPIOE, &GPIO_InitStructure); #elif defined USE_STM32L152D_EVAL /* Enable GPIOG clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOG, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_Init(GPIOG, &GPIO_InitStructure); #endif /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); #if defined USE_STM32L152_EVAL /* Connect EXTI8 Line to PE8 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource8); /* Connect EXTI9 Line to PE9 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource9); #elif defined USE_STM32L152D_EVAL /* Connect EXTI8 Line to PG8 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG, EXTI_PinSource8); #endif /* Configure EXTI8 line */ EXTI_InitStructure.EXTI_Line = EXTI_Line8; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Configure EXTI9 line */ EXTI_InitStructure.EXTI_Line = EXTI_Line9; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI9_5 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
void configureExternalInterrupts_9_5(void){ /* Set variables used */ GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; /* Enable clock for GPIOB */ //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_5 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOC, &GPIO_InitStruct); /* Tell system that you will use PC8 for EXTI_Line8 */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource5); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource8); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource9); /* PC8 is connected to EXTI_Line12 */ EXTI_InitStruct.EXTI_Line = EXTI_Line5 | EXTI_Line8 | EXTI_Line9; /* Enable interrupt */ EXTI_InitStruct.EXTI_LineCmd = ENABLE; /* Interrupt mode */ EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; /* Triggers on rising and falling edge */ EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; /* Add to EXTI */ EXTI_Init(&EXTI_InitStruct); /* Add IRQ vector to NVIC */ /* PB12 is connected to EXTI_Line12, which has EXTI15_10_IRQn vector */ NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn; /* Set priority */ NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00; /* Set sub priority */ NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01; /* Enable interrupt */ NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; /* Add to NVIC */ NVIC_Init(&NVIC_InitStruct); }
/** * @brief Configures EXTI Line0 (connected to PA0 pin) in interrupt mode * @param None * @retval None */ static void EXTILine0_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable GPIOA clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure PA0 pin as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Connect EXTI Line0 to PA0 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); /* Configure EXTI Line0 */ EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI Line0 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
/* ********************************************************************************************************* * 函 数 名: PS2_StartWork * 功能说明: 配置中断,开始解码 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void PS2_StartWork(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* 使能SYSCFG时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* 连接 EXTI Line7 到 PG7 引脚 */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG, EXTI_PinSource7); /* 配置 EXTI LineXXX */ EXTI_InitStructure.EXTI_Line = EXTI_Line7; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /* 下降沿(等待 DRDY 由1变0的时刻) */ EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* 设置NVIC优先级分组 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); /* 中断优先级配置 最低优先级 这里一定要分开的设置中断,不能够合并到一个里面设置 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); PS2_CLK_1(); PS2_DATA_1(); g_tPS2.Status = 0; PS2_ClearBuf(); /* 复位FIFO,清除缓冲区 */ }
//PA0 WKUP唤醒初始化 void init_wkup(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能 GPIOA 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能 SYSCFG 时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输入模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能 LINE0 EXTI_Init(&EXTI_InitStructure);//配置 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PA0 连接到线 0 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断 0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级 2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级 2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置 NVIC NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2 }
/** * @brief This function is to initialize vexta excitation timing output to be captured using external interrupt * @param None * @retval None */ void StepperFeedback_init (void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable GPIOB clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure PB12 pin as input pull up */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Connect MOTOR feedback to PB13, use EXTI to capture feedback */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource13); /* Configure EXTI Line13 */ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI Line13 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_Init(&NVIC_InitStructure); }
static void sensorsInterruptInit(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; // FSYNC "shall not be floating, must be set high or low by the MCU" GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_ResetBits(GPIOC, GPIO_Pin_14); // Enable the MPU6500 interrupt on PC13 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOC, &GPIO_InitStructure); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13); EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; portDISABLE_INTERRUPTS(); EXTI_Init(&EXTI_InitStructure); EXTI_ClearITPendingBit(EXTI_Line13); portENABLE_INTERRUPTS(); }
/** * @brief Configures EXTI Line14 (connected to PB14 pin) in interrupt mode * @param None * @retval None */ void EXTILine14_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable GPIOB clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure PB14 pin as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Connect EXTI Line14 to PB14 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14); /* Configure EXTI Line14 */ EXTI_InitStructure.EXTI_Line = EXTI_Line14; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI15_10 Interrupt to the lowest priority */ 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); }
/** * @brief Configures EXTI Line0 (connected to PA0 pin) in interrupt mode * @param None * @retval None */ static void EXTILine_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Enable GPIOA clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure PE0 and PE1 pins as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_Init(GPIOE, &GPIO_InitStructure); /* Connect EXTI Line to PE1 pins */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource1); /* Configure EXTI Line1 */ 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); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); /* Enable and set EXTI Line0 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
void led_power_init(int init_irq) { EXTI_InitTypeDef ei; GPIO_InitTypeDef gi; NVIC_InitTypeDef ni; gi.GPIO_Pin = GPIO_Pin_0; gi.GPIO_Mode = GPIO_Mode_OUT; gi.GPIO_OType = GPIO_OType_PP; gi.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOF, &gi); // PF0: LED voltage enable gi.GPIO_Pin = GPIO_Pin_1; gi.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOF, &gi); // PF1: LED fault if (init_irq) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource1); ei.EXTI_Mode = EXTI_Mode_Interrupt; ei.EXTI_Line = EXTI_Line0; ei.EXTI_Trigger = EXTI_Trigger_Falling; ei.EXTI_LineCmd = ENABLE; EXTI_Init(&ei); ni.NVIC_IRQChannel = EXTI0_1_IRQn; ni.NVIC_IRQChannelPriority = 1; ni.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&ni); } }
// map the pin to exti mode and setup the irq etc static void gpio_set_edge_event(gpio_pin_t *pin, EXTITrigger_TypeDef trig, gpio_edge_event cb, void *param) { ///@todo only run the parts here that are needed (ie if already inited) ///@todo if NULL cb deinit EXTI_InitTypeDef exti_init; NVIC_InitTypeDef nvic_init; uint32_t exti_line = gpio_pin_to_exti_line(pin); // set pin to EXTI mode SYSCFG_EXTILineConfig(gpio_pin_to_port_source(pin), gpio_pin_to_pin_source(pin)); // Configure EXTIx line to trigger irq if ((trig == EXTI_Trigger_Falling) && (EXTI->RTSR & exti_line)) trig = EXTI_Trigger_Rising_Falling; // was already configured as rising so set to both else if ((trig == EXTI_Trigger_Rising) && (EXTI->FTSR & exti_line)) trig = EXTI_Trigger_Rising_Falling; // was already configured as falling so set to both exti_init.EXTI_Line = exti_line; exti_init.EXTI_Mode = EXTI_Mode_Interrupt; exti_init.EXTI_Trigger = trig; exti_init.EXTI_LineCmd = ENABLE; EXTI_Init(&exti_init); // Enable and set EXTI9_5 Interrupt to the lowest priority save_pin_for_irq(pin); ///@todo this may need to warn if another pin is registered with this irq in case the caller forgets the pins share irq's nvic_init.NVIC_IRQChannel = gpio_pin_to_exti_irq(pin); nvic_init.NVIC_IRQChannelPreemptionPriority = 0x0F; nvic_init.NVIC_IRQChannelSubPriority = 0x0F; nvic_init.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic_init); }
void KEY_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Configure the NVIC Preemption Priority Bits */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOE, &GPIO_InitStructure); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2 ); NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line2; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_Init(&EXTI_InitStructure); }
/** * @brief initialize the EXTI0 and the the NVIC for it */ void intiEXTI0AndNVIC () { //create variables EXTI_InitTypeDef initEXTI0; NVIC_InitTypeDef initNVIC; initEXTI0.EXTI_Line = EXTI_Line0; //set external interrupt line to 0 initEXTI0.EXTI_Mode = EXTI_Mode_Interrupt; //set it to ba an interrupt initEXTI0.EXTI_Trigger = EXTI_Trigger_Rising; //set to rising edge trigger. interrupt occurs with 0-1 transition initEXTI0.EXTI_LineCmd = ENABLE; //enable line EXTI_Init(&initEXTI0); //initialize EXTI0 //sets GPIO for EXTI0 line SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource0); initNVIC.NVIC_IRQChannel = EXTI0_IRQn ; //set channel to the exti0 that we initialized initNVIC.NVIC_IRQChannelPreemptionPriority = 0; //set to highest priority initNVIC.NVIC_IRQChannelSubPriority = 0; //when needs to wait, set still as highest priority initNVIC.NVIC_IRQChannelCmd = ENABLE; //enable channel NVIC_Init(&initNVIC); //initialize NVIC }
void attachInterrupt(uint8_t pin, void (*handler)(void), int mode) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // Record the handler to call when the interrupt occurs irqlines[pins[pin].extipinsource].handler = handler; /* Connect EXTI Line to GPIO Pin */ SYSCFG_EXTILineConfig(pins[pin].extiportsource, pins[pin].extipinsource); /* Configure EXTI line */ EXTI_InitStructure.EXTI_Line = irqlines[pins[pin].extipinsource].extiline; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; if (mode == RISING) EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; else if (mode == FALLING) EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; else if (mode == CHANGE) EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = irqlines[pins[pin].extipinsource].extiirqn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // The relevant EXTI?_IRQHandler // will now be called when the pin makes the selected transition }
void EXTILine5_Config( void ) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; /* Enable GPIOD clock */ RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOD, ENABLE ); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_SYSCFG, ENABLE ); /* Configure PD5 pin as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init( GPIOD, &GPIO_InitStructure ); /* Connect EXTI Line5 to PD5 pin */ SYSCFG_EXTILineConfig( EXTI_PortSourceGPIOD, EXTI_PinSource5 ); /* Configure EXTI Line5 */ EXTI_InitStructure.EXTI_Line = EXTI_Line5; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init( &EXTI_InitStructure ); /* Enable and set EXTI Line0 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( &NVIC_InitStructure ); }
void EXTI0_Init() { // Enable clock for GPIOA RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // Enable clock for SYSCFG RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); // Initialize PA0 as input for user button GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // Selects the PA0 as external interrupt source SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // External interrupt settings EXTI_InitTypeDef EXTI_InitStruct; EXTI_InitStruct.EXTI_Line = EXTI_Line0; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_Init(&EXTI_InitStruct); // Nested vectored interrupt settings (most important interrupt) NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00; NVIC_Init(&NVIC_InitStruct); }
/******************************************************************************* * Function Name : InitCoins * Description :硬币机初始化(投币);包括电源控制口 * Input : void * Output : void * Return : void *******************************************************************************/ void InitCoins(void) { GPIO_InitTypeDef GPIO_InitStructure;//GPIO初始化结构体 NVIC_InitTypeDef NVIC_InitStructure;//中断向量初始化结构体 EXTI_InitTypeDef EXTI_InitStructure;//外部中断初始化结构体 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//外设时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //脉冲输入脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //投币机电源控制脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource12); //中断线 EXTI_InitStructure.EXTI_Line=EXTI_Line12; EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); EXTI_ClearITPendingBit(EXTI_Line12); }
/** * Configure the Card Detection Pin * Name: SDCard_configureCD * * Description: Configures the card detection pin to generate an interrupt when a change in state is detected * This uses the External Interrupt (EXTI) to handle the interrupt * Then added into the Nested Vector Interrupt Controller (NVIC) * * Arguments: void * * Returns: void */ void SDCard_configureCD(){ EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; /* Enable clock for SYSCFG */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Tell system that you will use PC7 for EXTI_Line0 */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource7); /* PC7 is connected to EXTI_Line7 */ EXTI_InitStruct.EXTI_Line = EXTI_Line7; /* Enable interrupt */ EXTI_InitStruct.EXTI_LineCmd = ENABLE; /* Interrupt mode */ EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; /* Triggers on rising and falling edge */ EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; /* Add to EXTI */ EXTI_Init(&EXTI_InitStruct); /* Add IRQ vector to NVIC */ /* PC7 is connected to EXTI_Line7, which has EXTI9_5_IRQn vector */ NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_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 EXTILine3_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable and set EXTI Line3 Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Enable GPIOA clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); /* Configure PA3 pin as input floating */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Connect EXTI Line3 to PA3 pin */ SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource3); /* Configure EXTI Line3 */ EXTI_InitStructure.EXTI_Line = EXTI_Line3; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); }
void init_EXTI_GPIO(void) { GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //Init port_A GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_0); RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFGEN, ENABLE); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); EXTI_InitStruct.EXTI_Line = EXTI_Line0; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); NVIC_SetPriority(EXTI0_1_IRQn, 3); //задаем приоритет прерывания NVIC_EnableIRQ(EXTI0_1_IRQn); //разрешение прерывания EXTI0_1 }
/** * @brief Inicializa SW */ void bsp_sw_init() { GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; // Arranco el clock del periferico RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOA, &GPIO_InitStruct); // Configuro interrupcion SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); /* Configuro EXTI Line */ EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Habilito la EXTI Line Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
/** * @brief EXTI configuration for Ethernet link status. * @param PHYAddress: external PHY address * @retval None */ void Eth_Link_EXTIConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable the INT (PB14) Clock */ RCC_AHB1PeriphClockCmd(ETH_LINK_GPIO_CLK, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure INT pin as input */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = ETH_LINK_PIN; GPIO_Init(ETH_LINK_GPIO_PORT, &GPIO_InitStructure); /* Connect EXTI Line to INT Pin */ SYSCFG_EXTILineConfig(ETH_LINK_EXTI_PORT_SOURCE, ETH_LINK_EXTI_PIN_SOURCE); /* Configure EXTI line */ EXTI_InitStructure.EXTI_Line = ETH_LINK_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set the EXTI interrupt to priority 1*/ NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
/** * Configure EXTI callback */ void setupSwitchB(void (*f)()){ externalInterruptCallbackB = f; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable the clocks */ RCC_AHB1PeriphClockCmd(SWITCH_B_CLOCK, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure switch pin */ configureDigitalInput(SWITCH_B_PORT, SWITCH_B_PIN, GPIO_PuPd_UP); /* Connect EXTI Line to GPIO Pin */ SYSCFG_EXTILineConfig(SWITCH_B_PORT_SOURCE, SWITCH_B_PIN_SOURCE); /* Configure EXTI line */ EXTI_StructInit(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = SWITCH_B_PIN_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set EXTI Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = SWITCH_B_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = SWITCH_B_PRIORITY; NVIC_InitStructure.NVIC_IRQChannelSubPriority = SWITCH_B_SUBPRIORITY; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }