第4-章-外部中断课件_第1页
第4-章-外部中断课件_第2页
第4-章-外部中断课件_第3页
第4-章-外部中断课件_第4页
第4-章-外部中断课件_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章外部中断(EXTI)1主要内容4.1中断概念4.2中断与NVIC4.3EXTI寄存器描述4.4固件库配置方法24.1.1中断通道:

是传递、处理中断的信息通道 中断通道的主要特征:

(1)一般,中断通道对应有唯一的中断号、中断优先级、中断向量、服务程序;

(2)1个中断通道可以有多个中断源,每个中断源有对应的中断处理程序

如MCS-51单片机的串行口、T24.1中断概念3

Cortex-M3中断机制ARMcortex_m3内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK等)也都属于cortex-m3内核的部分。4Cortex-M3是一个32位的核,在传统的单片机领域中,有一些不同于通用32位CPU应用的要求。在工控领域,用户要求具有更快的中断速度,Cortex-M3采用了Tail-Chaining中断技术,完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70%中断。54.1.2STM32中断分类

1、CPU中断(15个通道)

包括非屏蔽中断、异常、指令中断、复位。

2、设备中断(43~68个通道)

指STM32微控制器片内所有设备的中断,其数量与型号有关,对于大容量(hd)类型,共60个。

3、外部中断(16/20个中断源、7/11个通道) 16个中断源,通过7个端口(PA、PB、PC、PD、PE、PF、PG)引脚接外部设备信号。

7个中断通道:EXTI0、1、2、3、4各占1个,EXTI9—5为1个,EXTI15—10为1个通道。 另外4个中断源连接的是内部设备,用于检测电压、RTC闹钟、两个唤醒CPU,且各占1个通道。6STM32中断系统结构NMI

外部中断SRM32微控制器CPU异常NVIC……EXTI0~15EXTI10~15EXTI5~9EXTI0~4片内设备43~68个EXTI控制器保留7对于互联型产品,外部中断/事件控制器有20个产生事件/中断请求的边沿检测器。其它产品,有19个。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。84.1.3STM32中断机制STM32目前支持的中断共为84个(16个内核+68个外部),和16级可编程中断优先级的设置。对于这4bit的中断优先级控制位还必须分成2组看:从高位开始,前面是定义抢先式优先级的位,后面用于定义子优先级。4bit的分组组合可以有以下形式:9组号分配情况00:4无抢先式优先级,16个子优先级11:32个抢先式优先级,8个子优先级22:24个抢先式优先级,4个子优先级33:18个抢先式优先级,2个子优先级44:016个抢先式优先级,无子优先级10所谓抢占式优先级和响应优先级,它们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。11当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果它们的抢占式优先级和响应优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪一个。每一个中断源都必须定义2个优先级。12有几点需要注意的是:1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到无法预料的结果;2)抢占式优先级别相同的中断源之间没有嵌套关系;3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。134.2.1中断和异常向量144.2中断与NVIC

优先级中断通道名说明偏移地址7WWDG窗口看门狗定时器中断0x003C8PVD电源电压检测接EXTI16引脚0x00409TAMPER侵入检测中断0x004410RTC实时钟全局中断0x004811FLASH闪存全局中断0x004C12RCC复位和时钟控制中断0x005413EXTI0外部设备通道0中断0x005814EXTI1外部设备通道1中断0x005C15EXTI2外部设备通道2中断0x006016EXTI3外部设备通道3中断0x006417EXTI4外部设备通道4中断0x006818DMACH1DMA通道1全局中断0x006C19DMACH20x007015中断向量表

优先级中断通道名称说明偏移地址20DMACH30x007421DMACH40x007822DMACH5DMA通道5全局中断0x007C23DMACH60x008024DMACH70x008425ADC1-2ADC1-2全局中断0x008826USB_HP/CAN_TXUSB高/低优先级中断或CAN发/收中断0x008C27USB_LP/CAN_RX00x009028CAN_RX10x009429CAN_SCECAN的SCE中断0x009830EXTI9_5外部中断9~5通道0x009C31TIM1_BRKTIM1刹车中断0x00A032TIM1_UPTIM1更新中断0x00A416

优先级中断通道名称说明偏移地址33TIM1_TRG_COMTIM1触发和通信0x00A834TIM1_CCTIM1捕获比较中断0x00AC35TIM20x00B036TIM3TIM3全局中断0x00B437TIM40x00B838IIC1_EVIIC1事件中断0x00BC39IIC1_ERIIC1错误中断0x00C040IIC2_EV0x00C441IIC2_ER0x00C842SPI1SPI1全局中断0x00CC43SPI20x00D044USART1USART1全局中断0x00D417

优先级中断通道名称说明偏移地址44USART10x00D445USART2USART2全局中断0x00D846USART30x00DC47EXTI15-10外部中断15~10通道0x00E048RTCAlarm连接到EXTI17引脚0x00E449USBWakeUp连接到EXTI18引脚0x00E850TIM8_BRKTIM8刹车中断0x00EC51TIM8_UPTIM8更新中断0x00F052TIM8_TRG_COMTIM8触发和通信0x00F453TIM8_CCTIM8捕获比较中断0x00F854ADC3ADC3全局中断0x00FC55FSMCFSMC全局中断0x010056SDIOSDIO全局中断0x010418

优先级中断源名称说明偏移地址56SDIOSDIO全局中断0x010457TIM5TIM5全局中断0x010858SPI3SPI3全局中断0x010C59UART4UART4全局中断0x011060UART50x011461TIM60x011862TIM70x011C63DMA2CH1DMA2Ch1全局中断0x012064DMA2CH20x012465DMA2CH30x012866DMA2CH40x012C67DMA2CH50x013019

优先级中断源名称说明偏移地址68ETH以太网全局中断0x013469ETH_WKUP以太网唤醒接EXTI19引脚0x013870CAN2_TXCAN2发送中断0x013C71CAN2_RX00x014072CAN2_RX1CAN2接收1中断0x014473CAN2_SCE0x014874OTG_FS全速的USBOTG全局中断0x014C204.2.2嵌套向量中断控制器(NVIC)

STM32嵌套向量中断控制器(NVIC)主要特性:具有68个可屏蔽中断通道(不包含16个Cortex-M3的中断线)。具有16个可编程的优先等级。可实现低延迟的异常和中断处理。具有电源管理控制。每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求21224.2.3外部中断/事件线路映像23另外四个EXTI线的连接方式如下:EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USB唤醒事件EXTI线19连接到以太网唤醒事件244.3EXTI寄存器描述4.3.1中断屏蔽寄存器(EXTI_IMR)0:屏蔽来自线x上的中断请求;1:开放来自线x上的中断请求。25如果允许并口第3脚和第5,6中断,该如何设置?264.3.2事件屏蔽寄存器(EXTI_EMR)0:屏蔽来自线x上的中断请求;1:开放来自线x上的中断请求。27如果允许第7,8出现事件请求,如何设置?284.3.3上升沿触发选择寄存器(EXTI_RTSR)0:屏蔽来自线x上的中断请求;1:开放来自线x上的中断请求。29第5,6脚和第15脚上升沿触发。如何设置??304.3.4下降沿触发选择寄存器(EXTI_FTSR)0:屏蔽来自线x上的中断请求;1:开放来自线x上的中断请求。31如果第3,4脚允许双边沿触发;第7,8脚允许下降沿触发,应该设置什么寄存器?如何设置?324.3.5软件中断事件寄存器(EXTI_SWIER)当该位为’0’时,写’1’将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_EMR中允许产生该中断,则此时将产生一个中断。注:通过清除EXTI_PR的对应位(写入’1’),可以清除该位为’0’。334.3.6挂起寄存器(EXTI_PR)复位值:0xXXXXXXXX在该位中写入’1’可以清除它,也可以通过改变边沿检测的极性清除。34第10,11脚出现中断,如何手工清除它们?35NVIC中的全局屏蔽(寄存器)

CPU中的特殊功能寄存器PRIMASK

和FAULTMASK

1、使用PRIMASK

屏蔽掉所有的外中断和软故障,除了NMI和handfault。相当于MCS-51中的EA。

2、使用FAULTMASK

屏蔽掉所有的外中断和故障,除了NMI。相当于MCS-51中的EA。

3、使用BASEPRI

屏蔽掉等于和低于某个优先级的中断。364.4固件库配置方法4.4.1基本步骤①初始化IO口为输入这一步设置外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。

否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。37②

开启IO口复用时钟,设置IO口与中断线的映射关系。

STM32的IO口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。38③开启与该IO口相对的线上中断/事件,设置触发条件。

这一步,配置中断产生条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。39

同时开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。40④配置中断分组(NVIC),并使能中断。这一步,配置中断的分组,以及使能,对STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。

41⑤编写中断服务函数。

这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃!所以在开启了某个中断后,一定要记得为该中断编写服务函数。在中断服务函数里面编写你要执行的中断后的操作。通过以上几个步骤的设置,外部中断完成。424.4.2库函数结构体简介

①EXTI结构体typedefstruct{uint32_tEXTI_Line;

EXTIMode_TypeDefEXTI_Mode;

EXTITrigger_TypeDefEXTI_Trigger;

FunctionalStateEXTI_LineCmd;}EXTI_InitTypeDef;43EXTI_Line参数EXTI_Linenn=0……….15;例如:

EXTI_Line0,EXTI_Line4,…………EXTI_Mode参数EXTI_Mode_Interrupt

EXTI_Mode_Event;EXTI_Trigger参数EXTI_Trigger_Falling,EXTI_Trigger_Rising_Falling,EXTI_Trigger_Rising;44

②NVIC结构体typedefstruct{uint8_tNVIC_IRQChannel;uint8_tNVIC_IRQChannelPreemptionPriority;uint8_tNVIC_IRQChannelSubPriority;FunctionalStateNVIC_IRQChannelCmd;}NVIC_InitTypeDef;45NVIC_IRQChannel参数

EXTI0_IRQn,EXTI1_IRQn,EXTI2_IRQn;EXTI3_IRQn,EXTI4_IRQn;EXTI9_5_IRQn,

EXTI15_10_IRQn。外部管脚中断。464.4.3软件配置①使能中断线时钟和AFIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);RCC->APB2ENR|=1<<(2+n);47②配置外部中断管脚

GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);48③配置NVIC结构体NVIC_InitTypeDefNVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);49④配置EXTI结构体

EXTI_ClearITPendingBit(EXTI_Linex);x=0-19GPIO_EXTILineConfig(GPIO_PortSourceGPIOX,GPIO_PinSourcex);X=A,B,C,D,E……x=0,1,……,1950EXTI_InitTypeDefEXTI_InitStructureEXTI_InitStructure.EXTI_Line=EXTI_Line2|EXTI_Line3|EXTI_Line5;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;

EXTI_Init(&EXTI_InitStructure);}51⑤写中断响应函数STM32不像C51单片机那样,可以用过interrupt关键字来定义中断响应函数,STM32的中断响应函数接口存在中断向量表中,是由启动代码给出的。默认的中断响应函数在stm32f10x_it.c中。

52EXTI0_IRQHandler()→第0脚中断EXTI1_IRQHandler()→第1脚中断EXTI2_IRQHandler()→第2脚中断EXTI3_IRQHandler()→第3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论