在STM32中,绝大多数事件都是不可见的,但是事件几乎都与终端功能绑定在一起,所以通常我们开启中断功能来使用相应的事件
EXTI:拓展中断和事件控制器,是stm32上的一个外设,可以捕获外部输入线电平变化等等一些事件,EXTI捕获到事件后,还可以生成相应的EXTI中断及等等的一些终端
EXTI的2个功能:捕获外部输入等事件,生成EXTI中断等中断请求
当输入线发生电平变化时,就会被边沿检测电路检测到,然后上升沿触发选择器和下降沿触发选择器会对这个信号进行选择,比如设置了下降沿触发寄存器,同时边沿检测电路检测到电平由1-0,则这个信号会通过或门,这就是硬件触发,同样的,软件中断事件寄存器的中断请求也可以通过或门,称为软件触发,信号通过或门,如果事件屏蔽器没有屏蔽该信号,则信号会到达脉冲发生器,发起中断请求,货唤醒CPU,中断请求会通过或门到达请求挂起寄存器,如果中断屏蔽寄存器没有屏蔽请求挂起寄存器,这一中断请求就会被送到NVIC
使用CubeMX进行中断配置
1.先进行系统时钟配置,选择外部晶振
2.进行最高频率设置
3.进入GPIO,开始中断配置,随便点击一个引脚,选择EXTI项
我们可以通过查阅参考手册,知道引脚在哪些事件线上
4.设置触发方式
5.设置中断优先级
6.代码输出设置
7.生成代码
自动生成的代码已经完成了刚才的配置
生成的代码可以复制到自己的项目中
中断的触发过程:
触发EXTI中断,CPU到中断向量表中取到存放在其中的偏移量,也就是入口地址,最后跳转到中断服务函数中
以下都是中断向量表中的服务函数,触发中断时,CPU就会到这里,根据终端编号进行偏移,取到偏移地址,EXTI被触发,就会跳转到下图红框部分