历史上的今天
返回首页

历史上的今天

今天是: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个…..)

推荐阅读

史海拾趣

HAHN - Elektrobau GmbH & Co KG公司的发展小趣事

高通公司在追求技术创新的同时,也积极履行企业社会责任。公司发布了《2023高通中国企业责任报告》,详细介绍了高通如何通过赋能数字化转型、负责任地经营以及可持续地运营等战略重点领域,推动社会公平发展。高通与中国乡村发展基金会、中国红十字基金会等多个机构合作,开展智慧农业、基层医务工作者培训等项目,助力乡村振兴和医疗卫生事业发展。此外,高通还致力于STEM教育,通过合作项目为下一代创新者提供技能和知识支持。这些举措不仅体现了高通的社会责任感,也为其在电子行业中的长远发展奠定了良好的社会基础。

Furukawa Electric Co Ltd公司的发展小趣事

1991年,高通的CDMA技术首次被商用于美国卫星通信公司的无线电话网,标志着高通在移动通信领域的重大突破。与此同时,高通开始向智能手机芯片方向转型,目标是利用芯片技术使手机具备更强大的计算能力。随着技术的不断成熟,高通推出了多款性能卓越的移动应用处理器,如Snapdragon系列,迅速占据了智能手机芯片市场的主导地位。这一转型不仅巩固了高通在移动通信领域的地位,也为公司的长期发展奠定了坚实基础。

Amveco Toroidal Power Products公司的发展小趣事

随着电子行业的快速发展,客户对环形变压器的性能要求也越来越高。Amveco公司敏锐地捕捉到了这一市场变化,加大了在技术创新和产品升级上的投入。公司研发团队不断攻克技术难关,成功开发出了一系列具有更高效率、更低损耗的环形变压器产品,满足了客户对高性能产品的需求。同时,公司还不断优化生产工艺,提高了产品的可靠性和稳定性。

DELTA公司的发展小趣事

为了更好地服务全球客户,Delta公司积极推进全球布局战略。公司在全球范围内设立了多个研发中心和生产基地,如中国大陆、中国台湾、美国、泰国、日本、墨西哥、印度、巴西以及欧洲等地。这些研发中心和生产基地不仅为Delta提供了强大的技术支持和生产能力,还使其能够更快速地响应市场需求,提供更贴近客户的服务。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

ANSHAN公司成立于上世纪末,当时正值电子行业的蓬勃发展期。创始人李先生凭借对电子技术的深厚理解和敏锐的市场洞察力,决定投身于这个充满机遇的领域。初创时期的ANSHAN面临资金短缺、人才匮乏和技术壁垒等多重挑战。然而,李先生带领团队日夜兼程,不断研发新产品,拓展市场渠道。他们坚持自主创新,不断攻克技术难题,逐渐在电子行业中崭露头角。

Accelink Technologies Co Ltd公司的发展小趣事

随着产品质量的不断提升和市场需求的不断扩大,ANSHAN公司开始积极拓展国内外市场。公司通过与国内外知名企业建立合作关系,参加国际电子产品展览会等方式,不断提升品牌知名度和影响力。同时,公司还注重售后服务体系建设,为客户提供全方位、高效的服务支持。这些举措有效提升了公司的市场竞争力,使ANSHAN成为电子行业中备受瞩目的品牌。

问答坊 | AI 解惑

为什么系统(或者芯片)工作频率越高功耗越大

为什么系统(或者芯片)工作频率越高功耗越大 牛人接招!各抒己见吧…

查看全部问答>

EP1C6Q240C8N电路图

由于是第一次画FPGA产品,让大家看一下我这电路图有问题吗. EP1C6Q240C8核心板…

查看全部问答>

新人报道。我用28027做项目

单位要用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,如何调用文件来操作。

我用vs2008进行wince编程,想通过程序访问一个文件,并读取文件的内容,但是我把文件放在项目的DEBUG目录以及虚拟pocket pc的根目录下,老是出现错误,这是什么原因,是不是我哪个环节弄错了,那应该怎么办呢。 源文本文件: 1,校长,张三明 2,主 ...…

查看全部问答>

问题很难!!

1.最近刚刚用了Quartus II 9.1新版本,在使用时我想建立一个SOPC,但怎么也建立不起来,和Quartus II 8.1不一样,好像缺少了什么!在project显示的是New component..但双击它时,系统给出一些提示,有一些warnings,意思好像提示要建立一个新的compo ...…

查看全部问答>

ARM9S3C2440+AUO5.7寸液晶屏的连接

  小弟现在正在做一个系统,硬件采用ARM9的S3C2440,AUO5.7寸320*240的液晶屏,硬件上的连接采用的是端口直接连接(中间用22欧的电阻)VCLK、R0-R5、B0-B5、G0-G5,系统用的WINCE,进入系统之后发现屏可以正常显示,但是颜色不正,有点像 ...…

查看全部问答>

新手上路:我不会用MDISWIZVX.EXE,哪位大侠能指教一下

编译总会出现Warning,为什么呢?想了好几天,没有进展。 QQ:379993061…

查看全部问答>

求培训学校

要求从基础开始 在上海上课周末    教师有能力 有实力 具有一定的开发经验 我想学习硬件设计 最终目标 能自己设计系统 请大家推荐下好的培训学校 …

查看全部问答>

STM3210E-LK板子的DEMO程序源码

STM3210E-LK板子所附带的光盘应该有DEMO的源码,不过还是有很多人需要,还是把源码上传了吧。 STM3210E-LK_Demo.zip (332.57 KB) 下载次数: 1695 2009-11-3 10:30 STM3210E-LK User Manual.pdf (646.98 KB) 下载 ...…

查看全部问答>