EXTI (Extern Interrupt) 外部中断
EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
支持的触发方式:上升沿/下降沿/双边沿/软件触发
支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
(1) 不同端口、同一pin口,共用一个中断线:如PA1、PB1、PC1共用外部中断线1——EXTI_Line1;
(2) 同一pin口共用一个中断线,但16个中断线却只共用7个中断服务函数:其中中断线EXTI_Line0-4独立拥有一个中断服务,中断线5-9共用一个中断服务函数,中断线10-15共用一个中断服务函数。
GPIO_PIN不能相同:PA1和PB1不行,PA6和PA7可以,PA9和PB15可以,PB0和PB1可以
(图来源于江协科技)
(图源于《STM32F10XXX参考手册》)
如上图,GPIO_PIN相同的gpio共用了一个中断线。
中断线和中断服务之间的关系
DCD EXTI0_IRQHandler ; EXTI Line 0
DCD EXTI1_IRQHandler ; EXTI Line 1
DCD EXTI2_IRQHandler ; EXTI Line 2
DCD EXTI3_IRQHandler ; EXTI Line 3
DCD EXTI4_IRQHandler ; EXTI Line 4
DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
注意:不可以同时配置PA6和PA8触发外部中断
因为EXTI_Line6和EXTI_Line8是共用一个中断服务函数的,那触发EXTI_Line6和触发EXTI_Line8就进同一个中断服务函数了
解决方案:
进服务函数之后,判断是哪根中断线触发的就行:
if(ITStatus EXTI_GetITStatus(EXTI_Line6)){
中断线6程序+清标志位6
}
if(ITStatus EXTI_GetITStatus(EXTI_Line8)){
中断线8程序+清标志位8
}
通道数:16个GPIO Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
触发响应方式:中断响应/事件响应(不会触发中断,而是触发别的外设操作,属于外设之间的联合工作)