文章转自:http://blog.sina.com.cn/s/blog_643e988c0100yhkj.html
STM32外部中断包括硬件中断、事件中断和软件中断。
总共有19个外部事件/中断要求的边缘检测器,各个事件之间相互独立;
每一个IO口都可以作为外部中断源,具有相同数值编号的IO口被分配为同一组,共用一条中断请求线
如图:
在NVIC定义过程中,EXTI0、EXTI1、EXTI2、EXTI3、EXTI4各自占用一个中断向量号,EXTI5~9一个中断向量号,EXTI10~15一个中断向量号。
PA1-PE1共用一段中断服务程序;
PA2-PE2共用一个中断向量号,对应同一个中断服务函数;
而EXTI5~9中的25个IO口和EXTI10~15中的25个IO口共用一段中断复位程序。
这就意味着对于内核来说,它自身能够区分PA1、PA2的中断,却不能区分PA1和PB1产生的中断;使用时必须加以区分。
寄存器:1、外部中断配置寄存器 AFIO_EXTxCR1------->用于选择输入中断源 Pin 0..3
AFIO_EXTxCR2------->用于选择输入中断源 Pin 0..7
AFIO_EXTxCR2------->用于选择输入中断源 Pin 8..11
AFIO_EXTxCR2------->用于选择输入中断源 Pin 12..15
(说明:5个端口PORTA..E,每个端口各有16位可供选择)
2、中断屏蔽寄存器 EXTI_IMR----------->屏蔽线上的中断请求 共19路
3、事件屏蔽寄存器 EXTI_EMR----------->屏蔽线上的事件 共19路
4、上升沿触发选择寄存器 EXTI_RTSR---------->设置相应线为上升沿触发 19位
5、下降沿触发选择寄存器 EXTI_FTSR---------->设置相应线为上升沿触发 19位
6、挂起寄存器 EXTI_PR------------>中断线上发生了选择的边沿事件时置1 19位
7、软件中断事件寄存器 EXTI_SWIER--------->写该位可以将EXTI_PR中相应的位值高,如果
EXTI_IMR或EXTI_EMR使能,则可以产生相应的中断
配置流程:中断在使用前必须对中断线进行配置并激活
1、配置相应的IO口为输入,浮空输入时一定要加上拉或者是下拉
2、开启IO口复用时钟,设置IO与中断线的映射关系---->AFIO_EXTxCR1
3、设置相应中断触发条件---------->EXTI_IMR、EXTI_RTSR、EXTI_FTSR
4、在NVIC中开启并使能中断,对中断分组进行配置
5、编写中断服务函数