key_exti.h
#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
key_exti.h
#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;
}
}
main
#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)
{
}
}