1、中断类型

从之前的串口实验可以看出,STM32总共分为内部中断和外部中断,内部和外部的配置差别不是很大,外部中断只是多了一步,需要通过
GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数(在stm32f10x_gpio.h里面)
将外部中断源挂载到中断线上即可。

2、外部中断配置过程

1、开时钟(必须开启复用时钟)
2、初始化用到的GPIO口
3、将使用到的GPIO口挂载到中断线上 GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数
4、配置EXTI_Init() //中断线,中断的类型、触发方式
5、配置NVIC_Init() //中断优先级
6、编写中断服务函数

3、外部中断的主要配置说明

1)NVIC
外部出现满足中断条件,开始执行中断服务函数,如同时出现多个中断,则根据NVIC设定的优先级开始执行中断函数。
NVIC分组分析:NVIC的库函数和结构体定义都在misc文件中。
NVIC的分组分为两组,但优先级总数不变,均为16组,并且编号越小,优先级越高

============================================================================================================================NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  | Description============================================================================================================================NVIC_PriorityGroup_0  |                0                  |            0-15             |   0 bits for pre-emption priority|                                   |                             |   4 bits for subpriority----------------------------------------------------------------------------------------------------------------------------NVIC_PriorityGroup_1  |                0-1                |            0-7              |   1 bits for pre-emption priority|                                   |                             |   3 bits for subpriority----------------------------------------------------------------------------------------------------------------------------    NVIC_PriorityGroup_2  |                0-3                |            0-3              |   2 bits for pre-emption priority|                                   |                             |   2 bits for subpriority----------------------------------------------------------------------------------------------------------------------------    NVIC_PriorityGroup_3  |                0-7                |            0-1              |   3 bits for pre-emption priority|                                   |                             |   1 bits for subpriority----------------------------------------------------------------------------------------------------------------------------    NVIC_PriorityGroup_4  |                0-15               |            0                |   4 bits for pre-emption priority|                                   |                             |   0 bits for subpriority                       ============================================================================================================================

这里解释一下中断优先级分组是什么意思,有什么作用
第二列:NVIC_IRQChannelPreemptionPriority 抢占优先级
第三列:NVIC_IRQChannelSubPriority 响应优先级
(1)抢占优先级:指此中断的抢占能力,抢占优先级越高,则此中断就可以打断优先级低的函数,这样就会出现中断的嵌套。①两个抢占优先级一样的中断同时到达,那么就会比较响应优先级,越高越先反应;②两个抢占优先级一样的中断不同时到达,无关响应优先级,前一中断不会被打断,直到执行完前一中断,才会执行后一个中断。
(2)响应优先级:同时到达的中断的响应先后。两个抢占优先级一样的中断同时到达,那么就会比较响应优先级,越高越先反应。

2)中断服务函数
中断服务函数已经在“startup_stm32f10x_hd.s”中的264-323行声明,需要哪种中断直接去找即可。在配置EXTI时使用的中断线是哪一条,那么中断服务函数就选择哪一个。
个人建议所有的中断服务函数写在“stm32f10x_it.c”中,然后在原本设置的.c文件里面打一个备注,这样中断服务函数一目了然,在各个子程序里面也可以看到备注。

4、代码示例

/*
*main.c中需要添加
*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级  LED_Init();KEY_Init();      EXTI_Config();
/*
*EXTI 和 NVIC 配置函数
*/
void EXTI_Config(void)
{EXTI_InitTypeDef   EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;KEY_Init();//先配置需要用到的按键RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//一定要开启复用时钟//KEY1 PE3  上升沿 优先级2 1GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);EXTI_InitStructure.EXTI_Line = EXTI_Line3;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_Init(&EXTI_InitStructure);   NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
/*
*中断服务函数
*/
//KEY1 中断服务函数
void EXTI3_IRQHandler(void)
{delay_ms(10);//消抖if(KEY1 == 1){LED1 = !LED1;}EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
}

STM32 EXTI外部中断及NVIC的抢占优先级和响应优先级解释相关推荐

  1. STM32 EXTI外部中断/事件

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

  2. STM32 EXTI外部中断的使用

    简介: 1.中断系统 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断优先级:当有多个 ...

  3. STM32—EXTI外部中断

    文章目录 一.思路步骤(看懂这张图) 1. 打开RCC时钟树 2.配置GPIO(三种模式) 3.配置AFIO中断引脚选择 4.打开EXTI 5.配置NVIC(先选择组在初始化NVIC) 6.自己书写中 ...

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

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

  5. STM32外部中断与(NVIC)中断优先级管理

    文章目录 1.中断介绍 1.中断的概念 2.中断的产生 3.中断处理的流程 2.STM32内嵌向量中断控制器NVIC 1.NVIC控制器的寄存器 2.STM32中断配置 3.STM32外部中断EXIT ...

  6. STM32学习笔记(三)丨中断系统丨EXTI外部中断(对射式红外传感器计次、旋转编码器计次)

    本篇文章包含的内容 一.中断系统 1.1 中断的定义 1.2 中断优先级 1.3 中断的嵌套 1.4 STM32中的中断系统 1.4.1 STM32的中断资源 1.4.2 嵌套中断向量控制器 NVIC ...

  7. STM32学习笔记——EXTI外部中断,光敏传感器控制LED灯

    中断系统 中断:在主程序运行过程中,当出现了特定的中断触发条件,CPU就可以暂停当前正在运行的程序去处理中断程序,并把当前程序的地址压入堆栈,中断程序处理完成后把地址弹出堆栈,回到刚刚暂停的位置继续执 ...

  8. 面向应用学习stm32(4)-EXTI外部中断

    前导:本文的目的与,意在于面向应用的学习单片机,故不会涉及太多的原理知识,例如寄存器之类的. 主要目的在于面向应用的学习单片机,学会单片机的基础用法,开发板采取野火的指南者f103. 作者大二小白,写 ...

  9. STM32中断—EXTI外部中断

    5. 中断 本文来自于<STM32--江科大>的笔记整理. 中断系统 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处 ...

最新文章

  1. python 闭包_一篇文章读懂Python的闭包与装饰器!
  2. shiro之第一个程序认证
  3. Android使用CountDownTimer倒计时
  4. Notepad++的安装和基本使用
  5. vlookup函数练习_为什么职场要学excel函数?看这个案例演示:自动计算快递价格...
  6. ubuntu 下LAMP服务器环境搭建
  7. (11)FPGA面试技能提升篇(Cadence)
  8. 实操长文|评估风控策略效果(全)
  9. 达观杯文本智能处理(5)
  10. Linux例行性工作排程 (crontab)
  11. 毕业论文速成指南来了!
  12. html字体颜色渐变色,css颜色渐变实例:css3文字颜色渐变的实现方法
  13. [转]微服务概念解析
  14. 《Qt on Android核心编程》介绍
  15. 腾达无线打印服务器,(原创)腾达PA + PA3电力猫扩展无线信号 路由器LAN口智能扩展...
  16. 基于STM32F4的CANOpen移植教程(超级详细)
  17. 使用Helm在k8s集群上部署以太坊私有链
  18. Symbian OS应用编程图形篇之架构
  19. 千克与磅之间的转换 Exercise05_05
  20. python有道-Python3基础 访问在线的有道词典

热门文章

  1. 自己动手做聊天机器人 一-涉及知识
  2. python定义复数数组_python数组
  3. 站住,你这个Promise!
  4. 计算机网络之域名解析
  5. omapl138移植uboot系列之移植板卡(第五篇)
  6. 简单了解下什么是 Web 3.0?
  7. 转:《你对固态硬盘了解多少》
  8. Java中2.5D游戏(斜45度角)的设计与实现(1)
  9. 百度CEO李彦宏:百度将来会进行专门投资
  10. 深度!用“极速统一”,开启金融行业数据分析新范式