外部割込み/イベントコントローラ(EXTI) †各GPIOの0はEXTIの0に、GPIOの1はEXTIの1にといった具合に、15まで対応する形でつながっています。 クロックの供給とGPIOの初期化 †/* Enable Button GPIO clock */ RCC_APB2PeriphClockCmd(GPIOX_RCC | RCC_APB2Periph_AFIO, ENABLE); /* Configure Button pin as input floating */ GPIO_InitStructure.GPIO_Pin = OB_SW_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(OB_SW_PORT, &GPIO_InitStructure); EXTIとして使用するGPIOの指定 †GPIO_EXTILineConfig(GPIO_PortSourceGPIOx , GPIO_PinSourcex);
EXTIの初期化 †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); NVICの設定 †NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
EXTI割込み(ライン0-4) †EXTI0_IRQHandler() †void EXTI0_IRQHandler(void) { /* Clear the Key Button EXTI line pending bit */ EXTI_ClearITPendingBit(EXTI_Line0); 処理(); } EXTI_ClearITPendingBit(EXTI_Linex) †
EXTI割込み(ライン5-9) †EXTI9_5_IRQHandler() †void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line5) != RESET) { 処理(); } } EXTI割込み(ライン15-10) † |