STM32基础篇:EXTI × 事件 × EXTI标准库

EXTI

EXTI简介

EXTI:译作外部中断/事件控制器,STM32的众多片上外设之一,能够检测外部输入信号的边沿变化并由此产生中断。

例如,在检测按键时,按键按下时会使电平产生翻转,因此可以使用EXTI来读取按下时的边沿变化,从而给NVIC输出一个中断触发信号,通过中断响应函数实现想要的功能。


EXTI内部结构

当外部输入信号输入时,首先会经过一个叫边沿检测的模块,它有两路输出信号,分别是上升沿信号和下降沿信号。当外部输入信号发生一个上升沿时,边沿检测模块会在上升沿信号路输出一个脉冲信号(下降沿正好相反)。这两路输出信号再经过一个或门,形成双边沿信号路,即无论上升沿还是下降沿都会此路产生脉冲信号。

通过数据选择器(复用器),从上述的三路里选择一路,连接到输出(例如,选择上升沿信号路,相当与选择了上升沿进行触发,意思是只有当输入信号发生上升沿时,会触发中断)。数据选择器就是用来选择中断触发的边沿。

再往右走,有一个或门,一端连接了外部输入信号变化所触发的脉冲信号,另一端连接到了软件触发。(即:我们既可以通过外部输入信号的边沿变化去触发一个中断,也可以通过软件编程直接去触发中断)

再往右还有中断屏蔽和事件屏蔽,最后是中断挂起(其实就是挂起寄存器的一个比特位),当中断挂起收到脉冲信号后,其值由0变1,但是它不能完成自动清零,我们必须手动向这个寄存器写0。

因为挂起寄存器直接与NVIC相连接 ,若不置零,则NVIC输入端一直有中断触发信号,中断响应函数就会一直被循环执行。


EXTI通道

有时为了检测多个信号,将上图所示结构复制很多份,在EXTI里有20份这样的结构(即:EXTI0~EXTI19,且20份合起来才是一个完整的片上外设)。

作用:

1、让所有IO具有触发中断的能力

每个普通IO引脚都可以被设置为中断/事件的输入线,占用EXTI0~EXTI15共16个通道。但需要注意的是,对于数字编号相同的引脚来说,不能同时触发中断(例如我使用了PA0,就不能同时使用PB0、PC0等)。

注意,EXTI5~EXTI9、EXTI10~EXTI15这两组通道的输出端连接在或门上。

2、其他功能

如下所示,用于特定的外设事件的EXTI16~EXTI19:


EXTI寄存器组

对于EXTI模块,其寄存器组如下(6个):

每一个寄存器有20个比特位,对应了EXTI的20个通道。


上升/下降沿选择寄存器

通过这两个寄存器来配置外部输入信号的触发方式(即:上升沿、下降沿或双边沿触发),相当于控制了复用器。

以TR0为例,当上升/下降沿选择触发器TR0分别为1、0时,为上升沿触发;分别为0、1时,为下降沿触发;均为1时,为双边沿触发。


其他寄存器

软件触发寄存器 :将对应比特位置1,软件触发的位置就会发出一个脉冲。

中断屏蔽寄存器:向其比特位写0,中断就被屏蔽;写1,中断就会被挂起;

挂起寄存器:通常写这个寄存器,将其主动清零。

事件屏蔽寄存器:负则事件屏蔽的开关,方法与中断屏蔽寄存器一样。


事件

指突发事件本身,一般是一个脉冲信号,事件的处理过程不需要CPU介入(例如片上外设A产生了一个事件,那么它可以直接调用片上外设B去处理事件)。


EXTI标准库编程

在文件夹std_periph_driver里面存储着标准库的源码,其中stm32f10x_exti.h和stm32f10x_exti.c两个文件组成了EXTI的驱动。

EXTI_Init

用于初始化EXTI的某个通道。

cpp 复制代码
void EXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);

此函数的参数为结构体变量,初始化之前需要自己对其赋值,具体赋值的内容如下 :

需要注意,EXTI也不需要开启时钟,虽然EXTI是片上外设,但它与芯片唤醒有关,比较特殊,其时钟默认开启,且不可关闭。


附其他函数:

相关推荐
hairenjing11234 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
模拟IC攻城狮6 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
IT B业生6 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机
一枝小雨6 小时前
51单片机学习心得2(基于STC89C52):串口通信(UART)
单片机·嵌入式硬件·51单片机
IT B业生7 小时前
51单片机教程(一)- 开发环境搭建
单片机·嵌入式硬件·51单片机
u0101526588 小时前
STM32F103C8T6学习笔记2--LED流水灯与蜂鸣器
笔记·stm32·学习
海绵波波1079 小时前
Webserver(4.8)UDP、广播、组播
单片机·网络协议·udp
好想有猫猫9 小时前
【51单片机】串口通信原理 + 使用
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
云卓科技10 小时前
无人车之路径规划篇
人工智能·嵌入式硬件·算法·自动驾驶
stm 学习ing11 小时前
C语言 循环高级
c语言·开发语言·单片机·嵌入式硬件·算法·嵌入式实时数据库