目录
EXTI-扩展中断和事件控制器
事件的概念
EXTI-扩展中断和事件控制器
EXTI外设框图
F1/F4/F7(看懂与或门)
H7
STM32CubeMX中的EXTI配置
EXTI-扩展中断和事件控制器
事件的概念
- STM32上许许多多的外设,是通过内部信号来协同工作的。这个信号,可以理解为事件。比如一个定时器(TIM),当我们使用定时器来计数的时候,怎么知道定时器已经计数完毕?这时就往往通过一个“计数完成事件”来告知(系统/用户)计数已经完成。
- 有些事件是可见的,有些事件是不可见的。事件的可不可见,具体体现在寄存器里可不可以查到这些事件的标志。那如果我们想使用这些事件的时候,该怎么做?查询事件标志吗?
- 在STM32中,绝大多数事件是不可见的,但是事件几乎都与中断功能绑定在一起。所以通常我们会开启中断的功能,来使用相应的事件。
- 事件 ----> 中断 事件 ---->事件(即事件可以导致中断的产生,也可以导致另一个事件的产生)
EXTI-扩展中断和事件控制器
- EXTI-扩展中断(也叫外部中断)和事件控制器,是STM32上的一个外设。它可以捕获外部输入线电平变化等等的一些事件。EXTI捕获到了事件后,还可以生成相应的EXTI中断及等等的一些中断。
- 所以EXTI外设可以大致概括为两个功能:
- 捕获外部输入等事件。
- 生成EXTI中断等中断请求。
EXTI外设框图
F1/F4/F7(看懂与或门)
- 其中输入线一般指GPIO的输入,但在F7中,由于F7的功能强大,就不仅仅包括GPIO的输入(硬件触发)了,还包括软件触发(由软件中断事件寄存器来决定)
- 下降沿触发选择寄存器和上升沿触发选择寄存器决定了输入信号是否允许传入到下一级去。如果既不满足下降沿和上升沿,信号就无法通过边沿检测电路传入下一级门电路
- 请求挂起寄存器可以判断出是哪一种触发方式触发了事件
- 最终到NVIC中断控制器中,就可以切实的产生中断了
- 触发中断时,如果不想产生中断,可以使用屏蔽寄存器将中断信号拦截住
H7
其中可配置事件可根据F1/F3/F7框图来理解
直接事件输入指使用外设来唤醒芯片
主要功能是利用中断事件来申请中断请求或者唤醒CPU
STM32CubeMX中的EXTI配置
(1)选择GPIO线路
(2)进行模式选择
其中可以选择外部中断模式和外部事件模式,以及选择边沿触发方式
- 中断模式:既产生中断信号也产生事件信号
- 事件模式:只产生事件信号,事件模式一般用于将外部输入线的事件来触发ADC信号的转换或者其它外设的一些功能
这里选择双边缘触发外部中断方式
(3)配置NVIC
这里警告不用管。
这个警告的意义在于提醒开发者当你选择了引脚某功能后,会限制其他category 的部分功能。
如上图中被cubeMX 用紫红色标出的 System Wake-Up 4。
这种警告就是说一个管脚有多个可能的作用,你选择了一个之后,其他不能选,用一个警告三角形提示你。
(4)生成工程
(5)查看工程代码
EXTI代码如图所示
其中CubeMX是使用HAL_GPIO_Init来通过判断Mode的为IT从而实现EXTI的配置
同样我们也可以直接使用EXTI的库包来配置
补充:中断的触发流程和复位异常的触发流程是一样的。
当我们触发一个中断之后,CPU会去中断向量表中进行偏移,找到对应中断在中断向量表中的中断服务函数入口地址。
简单来说就是当中断成功触发了,就会跳转到相应中断的中断服务函数中去
记得自己指定的操作要写在中断服务函数的if内