Stm32中EXTI的作用
EXTI片上外设
EXTI简介
EXTI中文名字是外部中断,检测指定的引脚的电平的变化,一旦发生了电平变化,EXTI则会产生中断,这个中断会传送到NVIC哪里去。NVIC是stm32中断的管理设备。
关于中断和事件:
- 中断,由于 stm32 中的中断最终的管理者是 NVIC 所以,中断是需要进入 NVIC 进行处理的。
- 事件,不需要进入 NVIC ,仅用于内部硬件自动控制的,如:TIM、DMA等等
所以,EXTI的作用可以看作是管理芯片内外部事件的中断
EXTI的物理结构
由以上图可以看出EXTI如何使用,首先通过GPIO来输出信号,通过AFIO来选择一个信号并且将其输出至EXTI,交由EXTI同一管理。
AFIO的作用
- AFIO主要用于引脚复用功能的选择和重定义
- 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
结构框图:
- 调试IO配置,JTAG/SWD的开关状态
- 重映射配置,部分外设IO重映射配置
- 外部中断配置,配置 EXTI 中断线 0-15 对应到哪个具体IO口
AFIO相关函数
1 |
|
EXTI的作用
会向NVIC申请中断,通过NVIC的裁决后,判断是否中断,如何中断。所以EXTI的作用是检测作用。当有指定的情况发生时,EXTI会产生中断信号发送至NVIC
同时,EXTI不仅仅可以产生中断信号。还可以产生一个事件信号。事件信号就是不在通知cpu,而是去通知一个外设。这个事件信号就是外设之间的协调配合所使用的。而中断信号就是去通知cpu的。
下面是EXTI的内部结构图
怎么看这个结构图:
- 箭头、线上面的20表示有一样的20根线
产生中断线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用, 并且是电路级别的信号传输,属于硬件级的。
EXTI的特点:
每一条 EXTI 线都可以单独配置,并且可以选择类型(中断或是事件)并且 EXTI 的所有输出只有两条路径,一条是中断输出(至NVIC),一条是事件输出(至其他外设)。只是中断的使用多于使用事件。
stm32中的中断路线
GPIO/其他外设->AFIO/SYSCFG->EXIT->NVIC->CUP
EXTI和NVIC片上外设之间的关系
EXTI来进行检测,检测到信号以后发送给NVIC。由NVIC来进行处理。
EXTI是外部中断/事件控制器,主要用来通过电平的变化来产生外部中断。之后发给NVIC。
EXTI编程
首先,我们需要了解中断的配置步骤:
EXTI的初始化结构
1 |
|
详细解释:
EXTI_Line:EXTI中断/事件线选择,可选EXTI0至EXTI19,可参考表 EXTI中断_事件线 选择。
EXTI_Mode:EXTI模式选择,可选为产生中断(EXTI_Mode_Interrupt)或者产生事件(EXTI_Mode_Event)。
EXTI_Trigger:EXTI边沿触发事件,可选上升沿触发(EXTI_Trigger_Rising)、 下降沿触发( EXTI_Trigger_Falling)或者上升沿和下降沿都触发( EXTI_Trigger_Rising_Falling)。
EXTI_LineCmd:控制是否使能EXTI线,可选使能EXTI线(ENABLE)或禁用(DISABLE)。
相关函数
1 |
|
中断服务函数的定义
所有的中断服务函数都需要定义在stm32f10x_it.c
中,并且所有的中断函数名字都是确定的, 这是由于arm公司确定了中断向量表, 我们可以在startup_stm32f10x_hd.s
中找到, 当然这个需要根据自己的stm32芯片来选择.