bsp_key.c#include "bsp_key.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
/******使能GPIOC时钟*****/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
/******KEY对应引脚*****/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
/******普通输入模式*****/
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
/*****上拉******/
GPIO_Init(GPIOC,&GPIO_InitStructure);
/******初始化PC13*****/
}
bsp_exit.c#include "bsp_exit.h"
#include "bsp_key.h"
void EXTIX_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
KEY_Init();//按键对应的IO口初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//使用中断即为使用复用功能,这点M4与M3有区别
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource13);//PC13连接线13
EXTI_InitStructure.EXTI_Line=EXTI_Line13;//LINE13
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断事件
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿触发
EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能LINE13
EXTI_Init(&EXTI_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置系统化中断优先级分组1
NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//外部中断10-15
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;//抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;//子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
bsp_key.h#ifndef _BSP_KEY_H_
#define _BSP_KEY_H_
#include "stm32f4xx.h"
#define KEY GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)
void KEY_Init(void);
#endif
修改stm32f4xx_it.c#include "stm32f4xx_it.h"
#include "bsp_led.h"
extern void TimingDelay_Decrement(void);
……
……
……
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET) //确保是否产生了EXTI Line中断
{
LED_TOGGLE;
EXTI_ClearITPendingBit(EXTI_Line13); //清除中断标志位
}
}
|