历史上的今天
今天是:2025年03月01日(星期六)
2020年03月01日 | STM32之EXTI(中断)
2020-03-01 来源:eefocus
什么叫中断?(学过51单片机的肯定不陌生!!)
EXTI(External interrupt)指的是外部中断,通过GPIO检测输入脉冲,引起中断事件,打断原来的代码执行流程,进入到中断服务函数中进行处理,处理完后,再返回到之前中断的代码继续执行
stm32的中断和异常(在stm32中,所有的GPIO都可以用作外部中断源的输入端)
在stm32的中断向量表是重新进行编排的,(Cortex内核中,打断代码执行流程的事件分为异常(exception)以及中断(interrupt),编号0~15为内核异常,16以上都是外部中断(外部,是相对内核而言))
把编号-3至6的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,例如复位(Reset),不可屏蔽中断(NMI),硬错误(Hardfault)。从编号7开始的为外部中断,这些中断的优先级都是可以自行设置的
(中断向量表可以在《STM32中文参考手册》找到,不过最好是从启动文件startup_stm32f10x_hd.s(在工程目录的Libraries->CMSIS->startup目录下,具体根据自己工程目录的框架查找)中查找,因为不同型号的stm32芯片,中断向量表稍微有点区别,在启动文件中已经有相应芯片可用的全部中断向量,而且在编写中断服务函数的时候,需要从启动文件中定义的中断向量表查找出中断服务函数名称)
NIVC中断控制器以及NVIC_InitTypeDef分析
STM32的中断有如此之多,所以就需要一个中断控制器NIVC(Need Vectored Interrupt Controller),这个控制器是属于cortex内核的,不可屏蔽的中断和外部中断都是由他来处理(除SYSTICK外)
既然是STM32的中断控制器所以肯定在库中有封装好的库函数啦!!通过查找库帮助文档 我们会发现在Modules->STM32F10x_StdPeriph_Driver->misc中找到一个NVIC_Init()的函数,这里的形参需要一个NVIC_InitTypeDef类型的结构体
这个结构体有四个成员
NVIC_InitTypeDef{
NVIC_IRQChangle, //需要配置的中断向量
NVIC_IRQChangCmd, //使能或者关闭相应的中断向量的中断响应
NVIC_IRQChangPreemptionPriority, //配置相应中断向量的抢占式优先级
NVIC_IRQChangSubPriority, //配置相应中断向量的响应优先级
};
第一个NVIC_IRQChangle是用来选择将要配置的中断向量,用NVIC_IRQChangCmd来使能(ENABLE)或者关闭(DISABLE)该中断,在NVIC_IRQChangPreemptionPriority要配置中断向量的抢占式优先级,在NVIC_IRQChangSubPriority中配置中断向量的响应优先级
NVIC_IRQChangPreemptionPriority抢占式优先级以及NVIC_IRQChangSubPriority响应优先级
STM32的中断向量有两个属性,一个是抢占属性,另一个是响应属性,对应的属性的编号越小,优先级越高
抢占:是指打其他中断的属性,因为具有这个属性,所以会出现嵌套中断(在执行中断服务函数B的过程中被A打断了,然后会执行完中断服务函数A之后再继续执行终端服务函数B)
响应:当两个中断向量的抢占式优先级一样的时候,如果同时一起中断到达,那么优先处理响应等级高的。
举个例子:
有三个中断向量
中断向量 抢占式优先级 响应优先级
A 0 0
B 1 0
C 1 1
若正在执行C的中断服务函数,那么C能被抢占式优先级更高的A打断,由于B和C的抢占式优先级是一样的,所以不能被打断。但是如果B和C的中断时同时到达的,那么内核会先响应优先级更高的B
在配置优先级的时候,还需要注意一个问题,中断种类的数量这个图。
NVIC只可以配置16种中断向量的优先级,也就是说,抢占式优先级和响应优先级的数量由一个4位的数字来决定,把这个4位数字的位数分配成抢占式优先级部分和响应优先级部分,一共有5组我们在misc.h这个头文件可以查找到这5组的分配方式。

例如:第1组 最高的1位为抢占式优先级,低三位为响应优先级 既表示在16种中断向量中,有8种中断,其抢占式优先级都是0,响应优先级为0~7,另外8种中断,其抢占式优先级都是1,响应优先级为0~7。
(这里只说1组的含义,其他如此类推)
配置这些优先级组,可以用stm32库中提供的NVIC_PriorityGroupConfig(),参数为NVIC_PriorityGroup_0~NVIC_PriorityGroup_4。
ps:当一个工程有超过16个中断向量时,必然有2个以上的中断向量是使用了相同的种类,那么具有相同中断种类的中断向量是不能互相嵌套的
(注意,NVIC能配置的中断时16种,而不是最多16个…..)
史海拾趣
|
单位要用28027做电力线载波,可我英文不好,看了2个星期了,一点头绪都没有,那位能帮一下忙。 工作3年了,有单片机基础,前后用过5种单片机了(都还算是主流的牌子),要是学单片机的话,就是全英文的文档我也能对付,毕竟就是那些固定的寄存器之 ...… 查看全部问答> |
|
招聘:无锡+外资半导体厂商+质量经理Quality manager 本人猎头MM,现为无锡某外资半导体厂商招聘Quality manager质量经理。 投递简历或咨询:hunter.sweet@163.com,来信必复。 具体细节如下: Quality Manager Report to: MD Subordinate: 5-6 team members Resoponsibility: - M ...… 查看全部问答> |
|
我用vs2008进行wince编程,想通过程序访问一个文件,并读取文件的内容,但是我把文件放在项目的DEBUG目录以及虚拟pocket pc的根目录下,老是出现错误,这是什么原因,是不是我哪个环节弄错了,那应该怎么办呢。 源文本文件: 1,校长,张三明 2,主 ...… 查看全部问答> |
|
小弟现在正在做一个系统,硬件采用ARM9的S3C2440,AUO5.7寸320*240的液晶屏,硬件上的连接采用的是端口直接连接(中间用22欧的电阻)VCLK、R0-R5、B0-B5、G0-G5,系统用的WINCE,进入系统之后发现屏可以正常显示,但是颜色不正,有点像 ...… 查看全部问答> |
|
STM3210E-LK板子所附带的光盘应该有DEMO的源码,不过还是有很多人需要,还是把源码上传了吧。 STM3210E-LK_Demo.zip (332.57 KB) 下载次数: 1695 2009-11-3 10:30 STM3210E-LK User Manual.pdf (646.98 KB) 下载 ...… 查看全部问答> |




