简述

本文简单介绍stm32外部中断的一般操作步骤,后续会补充外部中断的相关内容

stm32的中断控制器支持19个外部中断/事件请求:

  • line0~line15:这16条line分别对应不同GPIO口的输入中断,比如:

    line0对应GPIOA的pin0、GPIOB的pin0、GPIOC的pin0、GPIOD的pin0、GPIOE的pin0;

    line1对应GPIOA的pin1、GPIOB的pin1、GPIOC的pin1、GPIOD的pin1、GPIOE的pin1;

    依此类推
  • line16:连接到PVD的输出
  • line17:连接到RTC闹钟事件
  • line18:连接到USB唤醒事件

需要注意的是,line0到line15,每条line同一时刻只能选择一个GPIO口作为中断源。

中断服务函数列表如下:

EXTIO_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler

一个中断向量对应到一个中断服务程序。在stm32中,外部中断线只分配到了7个中断向量,而外部中断线有19根;所以有些中断线是共用同一个中断向量的。从上面的列表可以看出:

  • line0到line4分别对应一个中断向量
  • line5到line9共用一个中断向量
  • line10到line15也是共用一个中断向量
  • line16到line18分别对应一个中断向量

所以一般情况下,系统响应外部gpio中断时都需要判断是哪一条中断线产生了中断,这时可以使用以下接口来判断:

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生

并且在中断服务函数里面还需要清除中断标志,这时可以使用以下接口来清除:

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位

gpio中断工作流程

使用gpio中断功能,一般有以下几个步骤:

1、初始化GPIO口,配置IO口为输入

GPIO_Init()

2、开启IO口的复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

3、设置IO口与中断线的映射关系

void GPIO_EXTILineConfig();

4、初始化线上中断,设置触发条件等

EXTI_Init();

5、配置NVIC IRQ通道,并使能中断

NVIC_Init();

6、编写中断服务函数

 EXTIx_IRQHandler();

7、清除中断标志位

EXTI_ClearITPendingBit();

总结

后续本人有时间再继续补充外部中断相关内容。

浅谈stm32的外部中断的更多相关文章

  1. STM32的外部中断配置及使用

    STM32的外部中断配置及使用 配置1:GPIO: 配置外部中断为输入模式: 配置2:EXTI: 配置外部中断线和触发模式: 配置3:NVIC: 配置外部中断源和中断优先级: 需要注意的是:RCC_A ...

  2. STM32 GPIO外部中断总结

    一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...

  3. STM32之外部中断控制

    一.STM32外部中断 1.STM32外部中断结构图 如上图所示:主要包括四个环节,GPIO.AFIO.EXTI.NVIC.以STM32F103VE(100脚)为例说明硬件模块的数量: GPIO:   ...

  4. STM32之外部中断

    图1.0 图1.1 中断控制器支持23条中断线,其中16条是IO管脚中断线,分别是EXTI0~EXTI15:  图 1.2 另外七根中断线如下图: 中断线和管脚的对应关系:EXTI0~EXTI15 和 ...

  5. 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)

    引子 STM32的硬件I2C很多人都对它望而却步.因为很多电工都说,STM32 硬件 I2C有BUG.不稳定.死机等等……最后都使用GPIO模拟I2C. 的确,模拟I2C好用.但是在我看来在一个72M ...

  6. 浅谈Python导入外部文件

    import 和 from ... import * 有什么区别? 例如我写了个模块hello.py def print_func(args): print("Hello " + ...

  7. STM32之EXTI——外部中断

    互联网的广大网友,大家早上中午晚上好.EXTI...故名思义..EX表外,出..I表示Intrrupt..所以合起来就是外部中断...说到这..我觉得我最近的六级水平(背单词)又进了一步,稍微自夸了下 ...

  8. 转别人的 STM32外部中断使用注意事项

    前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...

  9. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

随机推荐

  1. swagger-ui提交请求无name(指input中的name属性)值

    swagger-ui提交请求,请求不包含name值,造成后台无法进行接受参数. @Operation(description = "上传文件",tags = "上传&qu ...

  2. 解释 MySQL 外连接、内连接与自连接的区别 ?

    先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一 个表的所有记录和另一个表中的所有记录一一匹配. 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合 条 ...

  3. 你将如何使用 thread dump?你将如何分析 Thread dump?

    新建状态(New) 用 new 语句创建的线程处于新建状态,此时它和其他 Java 对象一样,仅仅在堆区 中被分配了内存. 就绪状态(Runnable) 当一个线程对象创建后,其他线程调用它的 sta ...

  4. 滑动窗口法——Leetcode例题

    滑动窗口法--Leetcode例题(连更未完结) 1. 方法简介 滑动窗口法可以理解为一种特殊的双指针法,通常用来解决数组和字符串连续几个元素满足特殊性质问题(对于字符串来说就是子串).滑动窗口法的显 ...

  5. 动态规划 洛谷P1616 疯狂的采药

    动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...

  6. 浅谈Nodejs应用的主文件index.js的组成部分

    前言 Node妹子的问世,着实让我们前端攻城狮兴奋了一把,尤其本屌听说Javascript可以写服务端后,兴奋的像是看到了二次元萝莉的胖子...(●'◡'●).呃哼...YY先到这里,原谅本屌是个二次 ...

  7. Linux 0.11源码阅读笔记-块设备驱动程序

    块设备驱动程序 块设备驱动程序负责实现对块设备数据的读写功能.内核代码统一使用缓冲块间接和块设备(如磁盘)交换数据,缓冲区数据通过块设备驱动程序和块设备交换数据. 块设备的管理 块设备表 内核通过一张 ...

  8. Java/C++实现命令模式---多次撤销和撤回

    某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现.\ 类图: Java代码: ...

  9. PAT B1014 福尔摩斯约会

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...

  10. /dev/dm-0 ....(/dev/mapper机制)

    查看/dev下时候,会看到dm-xx的设备,那么这些设备到底是什么设备呢, Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制, 在该机制下,用户可 ...