- STM32F4的每个IO口均可作为外部中断输入;
- 外部中断线EXTI只有0~15对应外部IO口的输入中断(对应关系为GPIOX.0映射到EXTI0,例如:GPIOF.0映射到EXTI0),EXTI线16~22均连接到其他唯一的事件;
- 对于每个中断线我们可以设置相应的触发方式:上升沿,下降沿,边沿触发,并且可以设置每个中断线的使能;
- 外部中断的一般配置步骤:
- 使能SYSCFG时钟(只要我们使用到外部中断,就必须打开SYSCFG时钟,因为要用到相关寄存器如配置GPIO与中断线的映射关系);(APB2上)
- 设置IO口与中断线的映射关系,SYSCFG_EXTILineConfig();
- 初始化线上中断,设置触发条件等,EXTI_Init();
- 配置中断分组(NVIC),并使能中断,NVIC_Init();
- 编写中断服务函数,EXTIX_IRQHandler()(STM32只能使用7个中断服务函数,0~4都是单独的中断服务函数如EXTI3_IRQHandler(),而5~9共用一个中断服务函数,10~15共用一个如EXTI15_10_IRQHandler(),STM32所有中断服务函数的名字都已经在startup_stm32f40_41xx.s里面定义好了)
- 外部中断其它常用函数
EXTI_GetITStatus();判断中断线中断状态,是否发生
EXTI_ClearITPendingBit();清除中断线上的中断标志位
- 一般相应GPIO初始化及时钟使能在触发中断的函数中已经编写好,故不在中断配置中再进行配置,将封装好的触发函数写入中断配置中即可,如用按键来触发中断,全部按键相关函数在key()编写好,然后再中断配置中引入key()
- 常用的中断服务函数格式
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3)!=RESET) //判断某个线上的中断是否发生
{
中断逻辑
}
EXTI_ClearITPendingBit(EXTI_Line3);//清除Line线上的中断标志位
}