STM32F103中断

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参考手册》)

扫描二维码关注公众号,回复: 17342902 查看本文章

如上图,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唤醒、以太网唤醒
触发响应方式:中断响应/事件响应(不会触发中断,而是触发别的外设操作,属于外设之间的联合工作)

猜你喜欢

转载自blog.csdn.net/leiting0817/article/details/132115763