/** ****************************************************************************** * @file main.c * @author Ac6 * @version V1.0 * @date 01-December-2013 * @brief Default main function. ****************************************************************************** */ #include "stm32f4xx.h" volatile uint32_t timer_ms = 0; void SysTick_Handler() { if (timer_ms) { timer_ms--; } } void delay(int time) { timer_ms = time; while (timer_ms) {}; } void EXTI15_10_IRQHandler() { if(EXTI_GetITStatus(EXTI_Line13)) { if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) { GPIO_ToggleBits(GPIOA, GPIO_Pin_5); EXTI_ClearFlag(EXTI_Line13); EXTI_ClearITPendingBit(EXTI_Line13); } else GPIO_ResetBits(GPIOA, GPIO_Pin_5); } } int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_A; GPIO_StructInit(&GPIO_A); GPIO_A.GPIO_Pin = GPIO_Pin_5; GPIO_A.GPIO_Mode = GPIO_Mode_OUT; GPIO_A.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOA, &GPIO_A); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitTypeDef GPIO_C; GPIO_StructInit(&GPIO_C); GPIO_C.GPIO_Pin = GPIO_Pin_13; GPIO_C.GPIO_Mode = GPIO_Mode_IN; GPIO_C.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOC, &GPIO_C); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); EXTI_InitTypeDef exti; EXTI_StructInit(&exti); exti.EXTI_Line = EXTI_Line13; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Falling; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13); NVIC_InitTypeDef nvic; nvic.NVIC_IRQChannel = EXTI15_10_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 0x00; nvic.NVIC_IRQChannelSubPriority = 0x00; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); SysTick_Config(SystemCoreClock / 1000); while(1) {} }