主函数main.c
#include <stm32f4xx.h>
#include "led.h"
#include "key.h"#define PAin(n) (*(volatile uint32_t *)(0x42000000 + (GPIOA_BASE+0x10-0x40000000)*32 + (n)*4))
#define PEin(n) (*(volatile uint32_t *)(0x42000000 + (GPIOE_BASE+0x10-0x40000000)*32 + (n)*4))#define PEout(n) (*(volatile uint32_t *)(0x42000000 + (GPIOE_BASE+0x14-0x40000000)*32 + (n)*4))
#define PFout(n) (*(volatile uint32_t *)(0x42000000 + (GPIOF_BASE+0x14-0x40000000)*32 + (n)*4))int main(void)
{//抢占优先级0~3,支持4级!//响应优先级0~3,支持4级!NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);led_init();key_init();while(1){}
}//外部中断0的中断服务函数
//void EXTI0_IRQHandler(void)
void EXTI0_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line0) == SET){PFout(9)=0;delay();PFout(9)=1;delay();/* 清空标志位,告诉CPU当前中断请求完毕,可以去响应新的中断请求思考题:若不清空标志位,会出现什么现象?*/EXTI_ClearITPendingBit(EXTI_Line0);}}//外部中断2的中断服务函数
void EXTI2_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line2) == SET){PFout(10)=0;delay();PFout(10)=1;delay();/* 清空标志位,告诉CPU当前中断请求完毕,可以去响应新的中断请求思考题:若不清空标志位,会出现什么现象?*/EXTI_ClearITPendingBit(EXTI_Line2);}
}//外部中断3的中断服务函数
void EXTI3_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line3) == SET){PEout(13)=0;delay();PEout(13)=1;delay();/* 清空标志位,告诉CPU当前中断请求完毕,可以去响应新的中断请求思考题:若不清空标志位,会出现什么现象?*/EXTI_ClearITPendingBit(EXTI_Line3);}
}//外部中断4的中断服务函数
void EXTI4_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line4) == SET){PEout(14)=0;delay();PEout(14)=1;delay();/* 清空标志位,告诉CPU当前中断请求完毕,可以去响应新的中断请求思考题:若不清空标志位,会出现什么现象?*/EXTI_ClearITPendingBit(EXTI_Line4);}
}
----------------------
key.c代码
0x00优先等级最高
0x03等级最低