版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中断本章主要内容9.1中断系统概述9.2中断配置步骤9.3外部中断9.4STM32外部中断的应用实例
9.1中断系统概述9.1.1中断概念CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。引发中断的称为中断源。比如:看电视时突然门铃响,那么门铃响就相当于中断源。有些中断还能够被其他高优先级的中断所中断,那么这种情况又叫做中断的嵌套。
9.1.2中断源及优先级中断源:STM32F10x芯片有84个中断通道,包括16个内核中断和68个可屏蔽中断,这些中断通道已按照不同优先级顺序固定分配给相应的外部设备。NVIC介绍 NVIC英文全称是NestedVectoredInterruptController,中文意思就是嵌套向量中断控制器,它属于M3内核的一个外设,控制着芯片的中断相关功能。由于ARM给NVIC预留了非常多的功能,但对于使用M3内核设计芯片的公司可能就不需要这么多功能,于是就需要在NVIC上裁剪。ST公司的STM32F103芯片内部中断数量就是NVIC裁剪后的结果。
中断控制相关寄存器在固件库core_cm3.h文件NVIC结构体内。可打开任意库函数工程即可查看到。中断优先级: STM32F103芯片支持60个可屏蔽中断通道,每个中断通道都具备自己的中断优先级控制字节(8位,但是STM32F103中只使用4位,高4位有效),用于表达优先级的高4位又被为组成抢占式优先级和响应优先级,通常也把响应优先级称为“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
高抢占式优先级的中断事件会打断当前的主程序或者中断程序运行,俗称中断嵌套。在抢占式优先级相同的情况下,高响应优先级的中断优先被响应。
当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理那一个。 STM32F103中指定中断优先级的寄存器位有4位,这4位的分组方式如下:
设置优先级分组可调用库函数NVIC_PriorityGroupConfig(),在misc.c可以查看。9.2中断配置步骤
要使用中断我们就需要先配置它,通常都需经过这几步:(1)使能外设某个中断(2)设置中断优先级分组,初始化NVIC_InitTypeDef结构体typedefstruct{uint8_tNVIC_IRQChannel;//中断源
uint8_tNVIC_IRQChannelPreemptionPriority;//抢占优先级
uint8_tNVIC_IRQChannelSubPriority;//响应优先级
FunctionalStateNVIC_IRQChannelCmd;//中断使能或禁用}NVIC_InitTypeDef;(3)编写中断服务函数9.3外部中断 1.外部中断介绍 2.外部中断配置步骤 3.硬件电路 4.编写外部中断控制程序
9.3.1外部中断介绍EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达20个用于产生事件/中断请求的边沿检测器。EXTI的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发),还可独立地被屏蔽。
EXTI结构框图
9.3.2外部中断/事件线映射
STM32F10x的EXTI具有20个中断/事件线,如下:9.3.3外部中断配置步骤
要使用外部中断我们就需要先配置它,通常都需经过这几步:(EXTI相关库函数在stm32f10x_exti.c和stm32f10x_exti.h文件中)(1)使能IO口时钟,配置IO口模式为输入(2)开启AFIO时钟,设置IO口与中断线的映射关系RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);(3)配置中断分组(NVIC),使能中断(4)初始化EXTI,选择触发方式voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);typedefstruct{uint32_tEXTI_Line;//中断/事件线
EXTIMode_TypeDefEXTI_Mode;//EXTI模式
EXTITrigger_TypeDefEXTI_Trigger;//EXTI触发方式
FunctionalStateEXTI_LineCmd;//中断线使能或失能}EXTI_InitTypeDef;(5)编写EXTI中断服务函数EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandlerEXTI15_10_IRQHandler9.4.1硬件电路
9.4外部中断应用实例9.4.2编写外部中断控制程序
要实现外部中断方式控制LED,程序框架如下:(1)初始化对应端口的EXTI(2)编写EXTI中断函数(3)编写主函数(1)初始化对应端口的EXTIEXTI初始化函数:要使用外部中断,必须先对它进行配置。EXTI初始化代码如下voidMy_EXTI_Init(void){NVIC_InitTypeDefNVIC_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能时钟GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);//选择GPIOE2管脚用作外部中断线路GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);//选择GPIOE3管脚用作外部中断线路GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);//选择GPIOE4管脚用作外部中断线路GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//选择GPIOA0管脚用作外部中断线路//EXTI0NVIC配置NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;//EXTI0中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器//EXTI2NVIC配置NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;//EXTI2中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器//EXTI3NVIC配置NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;//EXTI3中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器//EXTI4NVIC配置NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;//EXTI4中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化NVIC寄存器EXTI_InitStructure.EXTI_Line=EXTI_Line0;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_InitStructure.EXTI_Line=EXTI_Line2|EXTI_Line3|EXTI_Line4;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);}(2)编写EXTI中断服务函数初始化EXTI后,中断就已经开启了,当任意按键按下后会触发一次中断,这时程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某玻璃厂节能减排规范细则
- 某美容院员工入职培训规范
- 2024年湘南幼儿师范高专单招综合素质考试题库附参考答案详解【巩固】
- 2025年黑龙江佳木斯三江职业学院单招职业技能考试题库【完整版】附答案详解
- 2024年石梅湾职业学院单招综合素质考试模拟试卷及完整答案详解(名师系列)
- 2024年芒砀汉文化学院高职单招职业技能考试题库附参考答案详解(B卷)
- 2025年辽宁省阜新市高职单招职业适应性测试考试题库附答案详解【B卷】
- 2027年山东长岛职业学院高职单招职业适应性测试考试题库带答案详解(典型题)
- 2024年河北现代装备职业学院单招综合素质考试题库附答案详解【模拟题】
- 2027年西安商贸职业学院单招综合素质考试题库及参考答案详解【综合卷】
- 雨课堂学堂在线学堂云《走进军事理论(空军工程)》单元测试考核答案
- 2026年安徽马鞍山市中考语文试题(附答案)
- 心理干预的时机与方式
- (正式版)DB43∕T 1973-2020 《涉路工程安全技术规范》
- 矿山生态恢复项目管理方案
- 天主教管理工作制度汇编
- 水利水电工程单元工程施工质量检验表与验收表(SLT631.6-2025)
- CBT在精神分裂症治疗中的应用
- 吊篮使用应急预案(3篇)
- 2026年品酒师黄酒品鉴知识培训测试卷及答案
- 2026年广西高考物理题库及一套完整答案
评论
0/150
提交评论