STM32的每个IO都可以作为外部中断的中断输入口。

STM32F103的中断控制器支持19个外部中断/事件请求。每个中断设有状态为,每个中断/事件都有独立的触发和屏蔽设置。

STM32F103的19个外部中断为:

EXTI线0~15:对应外部IO口的输入中断。

EXTI线16:连接到PVD输出。(Programmable Votage Detector 可编程电压监测器。连到EXTI的电源电压检测(PVD)中断)

EXTI线17:连接到RTC闹钟事件。

EXTI线18:连接到USB唤醒事件。

STM32供IO口使用的中断线只有16个,而STM32的IO口远超16个。

所以STM32的GPIOx.0~GPIOX.15(x=A,B,C,D,E,F,G)分别对应中断线0~15。

以线0为例,对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。

从《STM32中文参考手册》里可以看到映像,如下图:

但是中断线每次只能连接到1个IO口上,需要通过配置来指定中断线配置到哪个GPIO上。

在标准函数库中,该配置函数为:

/*** @brief  Selects the GPIO pin used as EXTI Line.* @param  GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.*   This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).* @param  GPIO_PinSource: specifies the EXTI line to be configured.*   This parameter can be GPIO_PinSourcex where x can be (0..15).* @retval None*/
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

配置示例:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);

GPIO_PinSource2即为EXTI2的线,在库里定义命名为EXTI_Line2。

EXTI_Line2相关配置如下:

EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

接着需要配置中断的优先级:

NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

配置结束后就要编写中断服务函数。

需要注意的是,中断线0~4每个中断线各自对应一个中断服务函数

EXPORT  EXTI0_IRQHandler           [WEAK]
EXPORT  EXTI1_IRQHandler           [WEAK]
EXPORT  EXTI2_IRQHandler           [WEAK]
EXPORT  EXTI3_IRQHandler           [WEAK]
EXPORT  EXTI4_IRQHandler           [WEAK]

中断线5~9共用一个中断服务函数

EXPORT  EXTI9_5_IRQHandler         [WEAK]

中断线10~15共用一个中断服务函数

EXPORT  EXTI15_10_IRQHandler       [WEAK]

在中断服务函数里,经常需要使用两个函数。

1、判断某个中断线上的中断是否发生(即相关标志位是否置位);

2、清除某个中断线上的中断标志位。

示例:

void EXTI2_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line2) != RESET){    ...EXTI_ClearITPendingBit(EXTI_Line2);}
}

除了EXTI_GetITStatus之外函数库还提供了EXTI_GetFlagStatus,两者的区别是EXTI_GetITStatus会先判断这种中断是否使能,使能了才去判断中断标志位,而EXTI_GetFlagStatus直接用来判断状态标志位。

STM32F1笔记(五)外部中断EXTI相关推荐

  1. STM32F103标准库开发:外部中断(EXTI)实验

    STM32F103标准库开发----目录 STM32F103标准库开发----外部中断(EXTI)实验----程序源码 本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 一.外部中断 ...

  2. 【嵌入式STM32-05】STM32 外部中断 EXTI 基本原理|库函数程序代码|寄存器

    STM32外部中断 1.中断基本原理 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断 ...

  3. STM32入门笔记03_EXTI外部中断详解+案例:红外对射计数、旋转编码器计数

    EXTI外部中断 中断的相关概念 中断源: 可以引起中断的事件称为中断源 中断: 在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成 ...

  4. STM32F1迷你板外部中断

    开始学习外部中断的基本知识 中断优先级分组管理 CortexM3内部支持256个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置.STM32F1系列有 8 ...

  5. hal库开启中断关中断_stm32的HAL库开发学习笔记之外部中断

    外部中断 中断线----EXTI线0~15(对应外部IO口的输入中断) 每个IO口都可以作为外部中断输入 每个中短线可以独立的配置触发方式(上升沿,下降沿,双边沿),触发/屏蔽,专用状态位. GPIO ...

  6. STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)

    参考:stm32的外部中断 震动感应 控制 继电器 作者:点灯小哥 发布时间: 2021-03-05 22:37:01 网址:https://blog.csdn.net/weixin_46016743 ...

  7. 蓝桥杯嵌入式学习STM32之外部中断EXTI详解

    先说点题外话. !是取逻辑反的意思, ~是按位取反的意思 !0x01=0: ~0x01=1111 1110; 进入正题 基本概念 STM32的每个IO都可以作为外部中断输入. STM32的中断控制器支 ...

  8. S32K系列S32K144学习笔记——GPIO外部中断

    一用S32K144苦似海,道友,能不用,千万不去用. 本例程基以下如图所示接口操作,MCU为S32K144,开发平台S32DSworkspace 功能描述:检测信号输入,如有低电平信号输入,则亮灯,无 ...

  9. 02、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及EXTI外部中断初始化参数配置】

    ----------接着上一篇笔记写 四.返回值函数 五.EXTI外部中断 1.配置RCC 2.配置GPIO 3.配置AFIO 4.配置EXTI 5.配置NVIC 中断函数 四.返回值函数 uint8 ...

最新文章

  1. springboot整合Quartz实现动态配置定时任务
  2. 实例解析linux内核I2C体系结构
  3. 论文笔记:PointSIFT
  4. Adapter适配器和base-adapter-helper库的使用
  5. Python3.X新特性之print和exec
  6. 架构师已死(转自UML软件工程组织)
  7. ITK:将矢量图像投射为另一种类型
  8. POJ - 1381 Secret Code(dfs+高斯整数)
  9. ubuntu20输入法qiehuan_UBUNTU 20 输入法问题
  10. 2017蓝桥杯c语言C组承压计算,2017蓝桥杯 省赛C题(承压计算)
  11. 7种方式实现3栏布局
  12. 学生选课管理系统(毕业设计)
  13. ARCGIS 10.2全套资源下载地址
  14. sqlserver企业版秘钥_SqlServer2008到期升级企业版 密钥+图解
  15. html5rpg游戏策划案,HTML 5开发RPG游戏之一(地图人物实现)
  16. 发掘 iGoogle
  17. java实现定时自动打卡脚本_android 定时自动上班手机打卡签到实例
  18. Quadratic Assignment Problem 二次分配问题 QAP
  19. 因果推断—现代统计的思想飞跃:过去、现在到未来(伯克利丁鹏博士万字长文)...
  20. cron表达式解析 + robfig/cron 源码剖析

热门文章

  1. lua菜鸟教程_Lua语言学习
  2. vb 获取mysql表第一行数据_vb如何将远程获取的数据插入本机数据表中
  3. matlab试用版的user id,免费试用MATLAB
  4. JS中apply和call的应用和区别
  5. Html5表单元素-搜索框和上传文件框
  6. 关于HTML5本地持久化存储的Web SQL、Local Storage、Cookies技术
  7. HTML 部分常用属性、组成属性|...超链接、路径、锚点、列表、滚动、URL编码、表格、表单、GET和POST
  8. gulp webpack整合
  9. button 和input 的区别及在表单form中的用法
  10. Bootstrap-table 部分浏览器显示不出来