江科大stm32 P5.1 EXTI外部中断
简介
中断系统是管理和执行中断的逻辑结构
外部中断是众多能产生中断的外设之一
外部中断
1.引脚电平变化产生中断
2.相同的Pin不能同时触发中断,PA1、PB1这种GPIO_Pin一样的
3.申请中断,让cpu执行中断函数
4.事件响应:当外部中断检测到引脚电平变化时,正常流程是选择触发中断
但是stm32也可以选择触发事件,外部中断信号不会通向cpu而是通向其他外设,用来触发其他外设的操作,比如触发DMA,ADC转换等,属于外设之间的联合工作
NVIC
stm32中断线很多,如果全部接到cpu上,cpu还要引出很多线适配,设计上就很麻烦,并且如果很多中断同时申请,或者中断很多产生了拥堵,cpu也会很难处理,毕竟cpu是用来运算的,所以NVIC就被设计出来处理中断分配了。上图的n表示一个外设可能同时占用多个中断通道。
优先级分组
EXTI
基本结构
EXTI只有16个GPIO通道,但每个GPIO外设都有16个引脚,如果每个引脚占用一个通道,那EXTI的16个通道显然不够用了,所以这里有一个AFIO中断引脚选择的电路模块,就是一个数据选择器,这也是之前说相同的Pin不能同时触发中断的原因。PA1,PB1只有一个能连接到通道1上
右边通向其他外设的就是事件响应
AFIO
stm32中AFIO主要负责复用引脚重映射和中断引脚选择
中断引脚选择(数据选择器)
复用引脚重映射
从右往左看,输入线和软件中断接在同一个或门上,任意一个为1或门就可以输出1。
信号通过这个或门后就兵分两路,一路向上触发中断,一路向下触发事件
触发中断首先向上置一个挂起寄存器,相当于一个中断标志位,可以读取这个寄存器判断哪个通道触发的中断
如果中断挂起寄存器置1,他就继续向左走和中断屏蔽寄存器进入同一个与门,然后至NVIC
这个与门相当于一个开关,中断屏蔽寄存器给1,那另一个就原封不动输出,中断屏蔽寄存器给0另一个不论输入什么输出都是0,相当于屏蔽了这个中断
下面的事件屏蔽寄存器的作用和中断屏蔽寄存器的作用一样
需要使用外部中断的设备
对于stm32来说想要获取的信号是外部驱动的很快的突发信号
比如旋转编码器
不推荐按键中断,因为不好处理抖动和松手检测而且,按键的输出波形也不是转瞬即逝的要求不高的话可以在主循环读取,不想在主循环读取的话可以考虑定时器读取,可以很好的处理按键抖动和松手检测
EXTI基本机构
1.配置RCC,把涉及的外设时钟都打开
2.配置GPIO,端口为输入模式
3.配置AFIO,选择我们用的这一路GPIO,连接到后面的EXTI (GPIO_EXTILineConfig)
4.配置EXTI,选择边沿触发方式,比如上升沿、下降沿或者双边沿,响应方式,中断响应和事件响应
5.配置NVIC,给中断选择一个合适的优先级,最后通过NVIC外部中断信号就能进入CPU了