对于STM32F103来说,其含有16条中断线,每一个中断线与GPIOx.0~x.15对应起来,比方说中断线0对应GPIOA.0,GPIOB.0.....GPIOG.0。
在库函数中,GPIO与中断线的映射函数为GPIO_EXTILineConfig(),例如GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2)
表示将E口与第二条中断线相连,即GPIOE.2。
接下来初始化参数,通过EXTI_Init(关于init的structure的指针),参数的数据类型为EXIT_InitTypeDef*,它有四个参数要设置,分别是中断线的标号EXTI_Line,分别是EXIT_Line0~15,第二个是中断模式,第三个是触发方式,分别是下降沿触发,上升沿触发或者任意电平触发,第四个参数是使能中断线。
然后再设置中断的优先级,这个代码在串口中也有。
接着编写中断服务函数,中断函数的名字已经事先定义过EXITx_IRQHandler,其中0-4一个中断线对应一个中断函数,5-9共用一个,10-15共用一个。在编写中断函数时经常用到EXTI_GetITStatus(EXIT_Line),用于判断这条线上是否发生了中断,另一个函数是用来清除中断标志位,一般用于中断函数结束前
void EXTI3_IRQHandler(){
if(EXTI_GetITStatus(EXTI_Line)!=RESET){//判断中断是否发生
/*code*/
EXTI_ClearITPendingBit(EXTI_Line3);//清除中断标志位
}
}
所以使用一个中断的步骤为
(1)初始化IO口
(2)开启AFIO时钟
(3)设置IO口与中断线的映射关系
(4)初始化线上中断,设置触发条件
(5)配置中断分组(NVIC),并使能中断
(6)编写中断函数
网友评论