#ifndef _KEY_EXTI_H #define _KEY_EXTI_H #include "stm32f4xx.h" #include "sys.h" #define KEY_UP_GPIO_PORT GPIOA #define KEY_UP_GPIO_PIN GPIO_PIN_0 #define KEY0_GPIO_PORT GPIOH #define KEY0_GPIO_PIN GPIO_PIN_3 #define KEY1_GPIO_PORT GPIOH #define KEY1_GPIO_PIN GPIO_PIN_2 #define KEY2_GPIO_PORT GPIOC #define KEY2_GPIO_PIN GPIO_PIN_13 #define KEY_UP HAL_GPIO_ReadPin(KEY_UP_GPIO_PORT,KEY_UP_GPIO_PIN) #define KEY0 HAL_GPIO_ReadPin(KEY0_GPIO_PORT,KEY0_GPIO_PIN) #define KEY1 HAL_GPIO_ReadPin(KEY1_GPIO_PORT,KEY1_GPIO_PIN) #define KEY2 HAL_GPIO_ReadPin(KEY2_GPIO_PORT,KEY2_GPIO_PIN) #define KEY_UP_PRE 0X01 #define KEY0_PRE 0x02 #define KEY1_PRE 0x03 #define KEY2_PRE 0x04 void KEY_EXTI_Init(void); #endif
#include "key_exti.h" #include "delay.h" #include "led.h" void KEY_EXTI_Init() { GPIO_InitTypeDef KEY_EXTI_InitStruction; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); //KEY_UP KEY_EXTI_InitStruction.Pin=KEY_UP_GPIO_PIN; KEY_EXTI_InitStruction.Mode=GPIO_MODE_IT_RISING; KEY_EXTI_InitStruction.Pull=GPIO_PULLDOWN; KEY_EXTI_InitStruction.Speed=GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(KEY_UP_GPIO_PORT,&KEY_EXTI_InitStruction); //KEY0 KEY_EXTI_InitStruction.Pin=KEY0_GPIO_PIN; KEY_EXTI_InitStruction.Mode=GPIO_MODE_IT_FALLING; KEY_EXTI_InitStruction.Pull=GPIO_PULLUP; HAL_GPIO_Init(KEY0_GPIO_PORT,&KEY_EXTI_InitStruction); //KEY1 KEY_EXTI_InitStruction.Pin=KEY0_GPIO_PIN; HAL_GPIO_Init(KEY0_GPIO_PORT,&KEY_EXTI_InitStruction); //KEY2 KEY_EXTI_InitStruction.Pin=KEY0_GPIO_PIN; HAL_GPIO_Init(KEY2_GPIO_PORT,&KEY_EXTI_InitStruction); HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); //KEY_UP HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); //KEY0 HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 1); HAL_NVIC_EnableIRQ(EXTI3_IRQn); //KEY1 HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 2); HAL_NVIC_EnableIRQ(EXTI2_IRQn); //KEY2 HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 3); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); } //KEY_UP void EXTI0_IRQHander() { HAL_GPIO_EXTI_Callback(KEY_UP_GPIO_PIN); } //KEY0 void EXTI1_IRQHander() { HAL_GPIO_EXTI_Callback(KEY0_GPIO_PIN); } //KEY1 void EXTI2_IRQHander() { HAL_GPIO_EXTI_Callback(KEY1_GPIO_PIN); } //KEY2 void EXTI15_10_IRQHander() { HAL_GPIO_EXTI_Callback(KEY2_GPIO_PIN); } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_PIN) { delay_ms(10); switch(GPIO_PIN) { case KEY_UP_GPIO_PIN: LED_RED_ON; break; case KEY0_GPIO_PIN: LED_RED_OFF; break; case KEY1_GPIO_PIN: LED_GREEN_ON; break; case KEY2_GPIO_PIN: LED_GREEN_OFF; break; } }
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" //#include "key.h" #include "key_exti.h" int main(void) { HAL_Init(); Stm32_Clock_Init(360,25,2,8); delay_init(180); LED_Init(); KEY_EXTI_Init(); while(1) { } }
原文:https://www.cnblogs.com/CaiFengYuanXing/p/13624040.html