[应用相关] ST32之外部中断EXTI

[复制链接]
644|17
 楼主| 慢醇 发表于 2021-3-27 21:30 | 显示全部楼层 |阅读模式
1.外部中断概述
1)32的每个IO都可以作为外部中断输入
2)32的中断控制器支持19个外部中断/事件请求:① 线0~15:对应外部IO口的输入中断。② 线16连接到PVD输出。③ 线17连接到RTC闹钟事件。④ 线18连接到USB唤醒事件

每个外部中断线可以独立的配置触发方式(上升沿、下降沿或者双边沿触发);触发/屏蔽,专用的状态位;检测脉冲宽度低于APB2时钟宽度的外部信号
 楼主| 慢醇 发表于 2021-3-27 21:31 | 显示全部楼层
2.外部中断控制器框图
6034605f33b70e2e6.png
注:2)中讲到19个外部中断/事件请求,图中讲20个外部中断/事件控制器是因为:对于互联型产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成,对于其它产品,则有19个能产生事件/中断请求的边沿检测器。
 楼主| 慢醇 发表于 2021-3-27 21:33 | 显示全部楼层
3.外部中断/事件线路映像
   112个通用IO端口通过以下图的方式连接到16个外部中断/事件线上:
33720605f340d64479.png
 楼主| 慢醇 发表于 2021-3-27 21:43 | 显示全部楼层
从图中可知有16个外部中断线,是否意味着有16个中断服务函数呢 ?实际上IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数如下表 94361605f369be7950.png
 楼主| 慢醇 发表于 2021-3-27 21:46 | 显示全部楼层
假如同时开启了线5,线6的中断,两者共用一个中断服务函数,就执行到同一个中断服务函数
7个中断服务函数:EXTI0_IRQHandler、EXTI1_IRQHandler、EXTI2_IRQHandler、EXTI3_IRQHandler、EXTI4_IRQHandler、EXTI9_5_IRQHandler、EXTI15_10_IRQHandler
 楼主| 慢醇 发表于 2021-3-27 21:48 | 显示全部楼层
4.外部中断一般配置过程
1) 外部中断的一般配置步骤:
①:初始化IO口为输入      GPIO_Init();
 楼主| 慢醇 发表于 2021-3-27 21:49 | 显示全部楼层
②:开启IO口复用时钟     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
     
 楼主| 慢醇 发表于 2021-3-27 21:49 | 显示全部楼层
③:设置IO口和中断线的映射关系   GPIO_EXTILineConfig                               (GPIO_PortSourceGPIOE,GPIO_PinSource2);
 楼主| 慢醇 发表于 2021-3-27 21:50 | 显示全部楼层
④:初始化线上中断,设置触发条件等     EXTIX_Init();
 楼主| 慢醇 发表于 2021-3-27 21:52 | 显示全部楼层
⑤:配置中断分组(NVIC),并使能中断      NVIC_Init();
 楼主| 慢醇 发表于 2021-3-27 21:53 | 显示全部楼层
⑥:编写中断服务函数      EXTIx_IRQHandler();
 楼主| 慢醇 发表于 2021-3-27 21:55 | 显示全部楼层
⑦:清除中断标志位     EXTI_ClearITPendingBit();
 楼主| 慢醇 发表于 2021-3-27 22:01 | 显示全部楼层
2) example:
  ①:函数 void EXTIX_Init(void);包含上一步①~⑤的内容
 楼主| 慢醇 发表于 2021-3-27 22:04 | 显示全部楼层
 楼主| 慢醇 发表于 2021-3-27 22:14 | 显示全部楼层
②:编写中断服务函数 void EXTI4_IRQHandler(void); 包含上一步⑥~⑦的内容
 楼主| 慢醇 发表于 2021-3-27 22:16 | 显示全部楼层
 楼主| 慢醇 发表于 2021-3-27 22:22 | 显示全部楼层
   ③: 主函数中包含的内容
 楼主| 慢醇 发表于 2021-3-27 22:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

1382

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部