STM32 EXTI外部中断小结

本文深入解析STM32的EXTI(外部中断/事件控制器),介绍其工作原理、配置流程及寄存器功能。通过一个按键控制LED灯的编程实例,详细展示了EXTI的初始化、中断优先级配置及中断服务函数编写过程。


本文为野火教程学习笔记。

EXTI原理解释

EXTI 简介

  EXTI (External interrupt/event controller) ——外部中断/事件控制器,其用于管理外设中GPIO和一些其他外设的中断。可以实现单独对某一线配置中断触发方式等操作。

EXTI原理框图解释

EXTI  边沿检测器检测外部的信号,上升沿和下降沿触发选择寄存器具体的配置会决定边沿检测电路检测何种边沿。

  检测到对应边沿后,检测电路输出1,软件中断事件寄存器的配置决定是否产生中断或事件,相当于小开关

  若配置响应这个边沿,则小开关输出1。下面由请求挂起寄存器事件屏蔽寄存器确定产生中断还是事件。这两个相当于选择开关

  如果为中断,最后来到中断屏蔽寄存器,这相当于大开关

  从原理图中我们可以看出,从输入线输入开始到NVIC向内核发出中断,中间要经过边沿检测电路,小开关,请求寄存器,大开关等寄存器。各个寄存器的对应名称已经标注在图片上。

输入线

  得知 EXTI 中断的过程后,探讨输入线部分内容。
  EXTI可以管理20根外部输入源,EXTI和对应外部输入源匹配后的整体叫做输入线

外部的输入源与中断线EXTI的对应关系如下图

   EXTI的前16根线的输入源只能是GPIO端口,单独一根线允许连接GPIO的固定一种端口;如:EXTI0 只能连接 0 端口,如:PA0,PB0… 不能连接别的端口,如不可连接PA1,PB1…
  
在这里插入图片描述

输入源+中断线=输入线

小结:外部中断理论部分

要使用 EXTI 外部中断。对于中断过程中,要配置框图中的各种寄存器以达到目的。对于输入线,要配置输入源和中断线以组成输入线。

编程实例

实例简介

上面介绍了EXTI的原理,我们现在编写一个按键控制LED灯的程序,其中让EXTI来检测按键按下的动作,然后产生中断,在中断函数中反转LED灯。

实验的电路图

从图中我们可以看出,按键默认是低电平。按下后为高电平。我们希望按键按下时有动作,所以我们要设置PA0上升沿触发,然后在中断函数中控制PB5反转。

开始编程(一)

  首先我们在User文件夹下新建文件夹以存放C和H文件,并添加到USER下Group中,把H文件填入IncludePath.

初始化EXTI和GPIO

初始化EXTI

  根据经验,固件库中一定有初始化的函数。打开stm32f10x_exti.h翻到最下面我们就可以看见这个头文件所有函数,果然有

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

一看就知道这是初始化函数。打开后发现只需要一个结构体的传入,F12这个结构体我们看到:
在这里插入图片描述
我们可以看见这个结构体提供了 :

EXTI_Line : 用来选定PXm 中的m
EXTI_Mode : 用来选定工作方式->中断/事件
EXTI_Tigger : 触发方式
EXTI_LineCmd : 开启开关。
这些成员变量的取值一定被枚举或宏定义好了。向上向下翻找就可以找到。

  在这里你一定发现,通过初始化 EXTI ,可以确定中断线,但无法确定输入源。即只能指定 PXm 中的 m,无法确定其中的X。想要配置输入源 需要从GPIO库中的函数进行配置。

初始化GPIO
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值