STM32 EXTI外部中断及NVIC的抢占优先级和响应优先级解释
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的抢占优先级和响应优先级解释相关推荐
- STM32 EXTI外部中断/事件
一.EXTI外部中断/事件功能框图 1.中断线路:①-②-③-④-⑤ ①输入线:有19个中断/事件输入线(联网型有20个),通过寄存器将这些输入线设置为任意一个GPIO. ②边沿检测电路:选择上升沿触 ...
- STM32 EXTI外部中断的使用
简介: 1.中断系统 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断优先级:当有多个 ...
- STM32—EXTI外部中断
文章目录 一.思路步骤(看懂这张图) 1. 打开RCC时钟树 2.配置GPIO(三种模式) 3.配置AFIO中断引脚选择 4.打开EXTI 5.配置NVIC(先选择组在初始化NVIC) 6.自己书写中 ...
- STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)
参考:stm32的外部中断 震动感应 控制 继电器 作者:点灯小哥 发布时间: 2021-03-05 22:37:01 网址:https://blog.csdn.net/weixin_46016743 ...
- STM32外部中断与(NVIC)中断优先级管理
文章目录 1.中断介绍 1.中断的概念 2.中断的产生 3.中断处理的流程 2.STM32内嵌向量中断控制器NVIC 1.NVIC控制器的寄存器 2.STM32中断配置 3.STM32外部中断EXIT ...
- STM32学习笔记(三)丨中断系统丨EXTI外部中断(对射式红外传感器计次、旋转编码器计次)
本篇文章包含的内容 一.中断系统 1.1 中断的定义 1.2 中断优先级 1.3 中断的嵌套 1.4 STM32中的中断系统 1.4.1 STM32的中断资源 1.4.2 嵌套中断向量控制器 NVIC ...
- STM32学习笔记——EXTI外部中断,光敏传感器控制LED灯
中断系统 中断:在主程序运行过程中,当出现了特定的中断触发条件,CPU就可以暂停当前正在运行的程序去处理中断程序,并把当前程序的地址压入堆栈,中断程序处理完成后把地址弹出堆栈,回到刚刚暂停的位置继续执 ...
- 面向应用学习stm32(4)-EXTI外部中断
前导:本文的目的与,意在于面向应用的学习单片机,故不会涉及太多的原理知识,例如寄存器之类的. 主要目的在于面向应用的学习单片机,学会单片机的基础用法,开发板采取野火的指南者f103. 作者大二小白,写 ...
- STM32中断—EXTI外部中断
5. 中断 本文来自于<STM32--江科大>的笔记整理. 中断系统 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处 ...
最新文章
- python 闭包_一篇文章读懂Python的闭包与装饰器!
- shiro之第一个程序认证
- Android使用CountDownTimer倒计时
- Notepad++的安装和基本使用
- vlookup函数练习_为什么职场要学excel函数?看这个案例演示:自动计算快递价格...
- ubuntu 下LAMP服务器环境搭建
- (11)FPGA面试技能提升篇(Cadence)
- 实操长文|评估风控策略效果(全)
- 达观杯文本智能处理(5)
- Linux例行性工作排程 (crontab)
- 毕业论文速成指南来了!
- html字体颜色渐变色,css颜色渐变实例:css3文字颜色渐变的实现方法
- [转]微服务概念解析
- 《Qt on Android核心编程》介绍
- 腾达无线打印服务器,(原创)腾达PA + PA3电力猫扩展无线信号 路由器LAN口智能扩展...
- 基于STM32F4的CANOpen移植教程(超级详细)
- 使用Helm在k8s集群上部署以太坊私有链
- Symbian OS应用编程图形篇之架构
- 千克与磅之间的转换 Exercise05_05
- python有道-Python3基础 访问在线的有道词典