一,中断引脚

STM32F407有23个外部中断检测器,芯片多达 140 个 GPIO(STM32F405xx/07xx 和 STM32F415xx/17xx)通过以下方式连接到 16 个外部中断/事件线。如图所示

例如:PA0占用了EXTI0,其他PB0~PI0是不能使用的。

23个中断检测器中出来16个与引脚相连外,还有七个中断如下图。

二,软件配置中断

以A0为例配置外部中断,总共有如下步骤,1.打开外设时钟和系统配置时钟,2.初始化GPIO口

3.连接中断线  4.配置外部中断0  (EXTI_Mode有两种模式一种是中断模式,一种是事件模式。这里选中断模式)5.配置中断优先级。6.写中断服务函数。

// 初始化按键(外部中断)
void KEY_EXTI_Init(void)
{/* 1.打开外设时钟(为了低功耗,需要分别打开) */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);   /* 打开系统配置时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);/* 2.配置PA0,并初始化 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;     // 引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;  // 模式:输入模式//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  // 输出类型(输入模式下,无效)//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // 端口速率(输入模式下,无效)GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 上下拉选择:浮空GPIO_Init(GPIOA, &GPIO_InitStructure);/* 3. PA0连接中断线0 */SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);/* 4.配置外部中断0 */EXTI_InitStructure.EXTI_Line = EXTI_Line0;               // 中断0EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;      // 中断模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发(按键按下)EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);/* 5.配置外部中断0的优先级 */NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;   //中断通道配置NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

中断服务函数。

void EXTI0_IRQHandler(void)
{//if(EXTI_GetITStatus(EXTI_Line0) == SET)    // 是一样的if(EXTI_GetITStatus(EXTI_Line0) != RESET){LED1 = ~LED1;/* 清空标志位,便于下次产生中断 */EXTI_ClearITPendingBit(EXTI_Line0);}
}

注意:配置中断优先级时,要注意“NVIC_IRQChanne”,中断通道的配置,中断通道不同与中断线。是两个不同的东西。在STM32F407中,外部中断“0”到外部中断“4”有独立中断通道。外部中断5到外部中断9公用一个中断通道,外部中断10到外部中断15公用一个外部中断通道。当你想配置外部中断4以上的外部中断时,NVIC_IRQChanne配置参数有所变化,分别为EXTI9_5_IRQn(外部中断5到9),EXTI15_10_IRQn.中断服务函数的名字也改为void EXTI9_5_IRQHandler(void),与void EXTI15_10_IRQHandler(void).

思考:假如按键IO是 PE13 PE14,PE15,那么无论按下那个按键都会执行EXTI15_10_IRQHandler函数,那么咋判断是那个按键按下。

答案是:虽然公用中断通道,但中断线不同,在中断服务函数中用EXTI_GetITStatus(),判断是那条中断线触发。当然中断处理完毕后要清空中断,用EXTI_ClearITPendingBit()函数。

三.中断优先级

1.中断优先级分组函数,通常写在主函数当中,如下

// 中断优先级选择第2组:拥有4种抢占、4种响应。NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

一般选择第二组,因为他有四个抢占和四个响应可选,原因看下图。

2.抢占优先级与响应优先级(数字越小,级别越高)

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //中断通道配置NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级配置NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级配置NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);

3.抢占优先级与响应优先级的区别

1)高抢占优先级是可以打断正在进行的低抢占优先级的中断。,抢占优先级若相同,则不会出现抢占的过程。

2)抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。先发生的函数执行完之后,在执行后发生的

3)抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行

4)抢占优先级和响应优先级完全相同的中断,假如同时发生,会按照硬件内部固定的优先级执行,如下图。

STM32基础-外部中断与优先级相关推荐

  1. STM32单片机外部中断配置讲解

    2019独角兽企业重金招聘Python工程师标准>>> 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平.低电平).边沿变化(上升沿. ...

  2. STM32的“外部中断”和“事件”区别和理解

    凡从事过ST MCU应用开发的人往往会遇到事件.中断事件 中断三个概念或术语.这三个概念彼此关联,有时会让人有点混淆或犯迷糊. 先拿一件生活中的事情打比方对上述三个概念做个基本的粗略理解,之后再分享一 ...

  3. STM32 EXTI外部中断及NVIC的抢占优先级和响应优先级解释

    1.中断类型 从之前的串口实验可以看出,STM32总共分为内部中断和外部中断,内部和外部的配置差别不是很大,外部中断只是多了一步,需要通过 GPIO_EXTILineConfig(uint8_t GP ...

  4. 【STM32+cubemx】0007 HAL库开发:外部中断,优先级和中断向量表

    这一节我们以外部中断为例子,讲讲中断的优先级和中断向量表的知识. 1)cubemx生成代码 首先还是在cubemx中生成代码,选择器件.设置SYS(调试接口).设置RCC(外部晶振时钟源). 然后设置 ...

  5. STM32基础之中断--外部中断

    EXTI简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 19个中断/事件线.每个中断/事件线都对应有一个边沿检测器,可以 ...

  6. 【STM32】外部中断实验代码详解

    文章目录 main.c exit.c exit.h STM32 的每个 IO 都可以作为外部 中断的中断输入口,这点也是 STM32 的强大之处. STM32F103 的 19 个外部中断为: 线 0 ...

  7. 【STM32】外部中断

    00. 目录 文章目录 00. 目录 01. 外部中断简介 02. 外部中断配置 03. 外部中断步骤 04. 硬件设计 05. 程序示例一 06. 程序示例二 07. 附录 08. 声明 01. 外 ...

  8. STM32单片机---外部中断

    外部中断 一.ARM Cortex-M3 的中断体系 二.代码思路 函数接口 1.为引脚选择使用哪个中断 2.配置外部中断 3.中断优先级配置 4.获取外部中断状态 5.清空外部中断标志位 中断优先级 ...

  9. STM32 EXTI外部中断/事件

    一.EXTI外部中断/事件功能框图 1.中断线路:①-②-③-④-⑤ ①输入线:有19个中断/事件输入线(联网型有20个),通过寄存器将这些输入线设置为任意一个GPIO. ②边沿检测电路:选择上升沿触 ...

最新文章

  1. Go 公布 2.0 设计草案:主打规模化和扩展性,支持泛型
  2. Hibernate4.x之Session
  3. 自学python之路(day2)
  4. professional asp.net 4 with c# and VB.net 阅读笔记
  5. HTML5新增的标签
  6. [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构
  7. 实现跨域访问---同源策略 、常见跨域方法
  8. C++面试宝典之STL向量容器
  9. PyTorch学习记录-1PyTorch安装
  10. 数据库的三才阵——地
  11. 分布式事务之基础概念篇
  12. 玻璃质感_现代质感的顶层公寓,玻璃扶手让楼梯整个变透明!
  13. macOs 10.12.2总于修复鼠标驱动了
  14. 蒟蒻刷洛谷(11月7日到11月13日)
  15. facebook广告后台设置
  16. t480 拆触摸板_thinkpadt480 win10电脑触摸板键盘失效怎么修复
  17. WIN10系统的Edge浏览器怎么能彻底删除掉
  18. 啤酒每罐2.3元,饮料每罐1.9元
  19. 为什么有的人赚钱很简单,有的人却不行?
  20. OPPO A59m刷机包|OPPO A59m官方线刷包救砖

热门文章

  1. Java_单继承和多继承
  2. 双减背景下小学中年级语文单元整体作业设计的实践研究
  3. HTML期末大作业: 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做...
  4. LintCode 644. 镜像数字 JavaScript算法
  5. 求超大文件上传方案( Web )
  6. android布局靠底部,android – 使用layout_gravity =“bottom”放置在LinearLayout的底部
  7. python3学习笔记
  8. 图片懒加载(仿SDWebImage)
  9. 2022年12月10日作业
  10. C语言——register