int flag = 0;
int main()
{
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init();
KEY_Init();
My_EXTI_Init(); //外部中断初始化
while(1)
{
if(flag==1)
{
GPIO_ResetBits(GBIOA,GPIO_Pin_1);
delay_ms(1000);
GPIO_SetBits(GBIOA,GPIO_Pin_1);
delay_ms(1000);
GPIO_ResetBits(GBIOA,GPIO_Pin_2);
delay_ms(1000);
GPIO_SetBits(GBIOA,GPIO_Pin_2);
delay_ms(1000);
GPIO_ResetBits(GBIOA,GPIO_Pin_3);
delay_ms(1000);
GPIO_SetBits(GBIOA,GPIO_Pin_3);
}
}
}
void LED_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化GPIO */
GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); //将LED端口拉高,熄灭所有LED
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GBIOB,&GPIO_InitStructure);
}
void My_EXTI_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);//选择GPIO管脚用作外部中断线路
//EXTI1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//EXTI1中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
extern int flag;
void EXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1)==1)
{
flag = 1;
}
EXTI_ClearITPendingBit(EXTI_Line1);
}