




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章:外部中断和中断控制器向量中断控制器,简称NVIC,是Cortex - M3不可分离的一部分,它与Cortex-M3内 核的逻辑紧密耦合,有一部分甚至水乳交融在一起。NVIC与 Cortex-M3内核,相辅相成, 里应外合,共同完成对中断的响应。NVIC的寄存器以存储器映射的方式来访问,除了包 含控制寄存器和中断处理的控制逻辑之外,NVIC还包含了MPU的控制寄存器、SysTick定 时器以及调试控制。6.1嵌套向量中断控制器6.1.1概述嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和有效处理地 处理晚到的中断。嵌套向量中断控制器管理着包括核异常等中断
2、。有下述特点:1.6 0个可屏蔽中断通道(不包含16个Cortex -M3的中断线);16个可编程的优先等级(使用了4位中断优先级);低延迟的异常和中断处理;电源管理控制;系统控制寄存器的实现;6.1.2中断和异常向量表6-1-1 STM32F10 xxx产品的向量表位置优先级优先级类型名称说明地址-保留0 x0000_0000-3固定Reset复位0 x0000_0004-2固定NMI不可屏蔽中断RCC时钟安全系统(CSS)联接到NMI向量0 x0000_0008-1固定硬件失效所有类型的失效0 x0000_000C0可设置存储管理存储器管理0 x0000_00101可设置总线错误预取指失败
3、,存储器访问失败0 x0000_00142可设置错误应用未定义的指令或非法状态0 x0000_0018-保留0 x0000_001C 0 x0000_002B34 -56可设置SVCall通过SWI指令的系统服务调用0 x0000_002C可设置调试监控调试监控器0 x0000_0030-保留0 x0000_0034可设置PendSV可挂起的系统服务0 x0000_0038可设置SysTick系统嘀嗒定时器0 x0000_003C07可设置WWDG窗口定时器中断0 x0000_004018可设置PVD联到EXTI的电源电压检测(PVD)中断0 x0000_004429可设置TAMPER侵入检测
4、中断0 x0000_0048310可设置RTC实时时钟(RTC)全局中断0 x0000_004C411可设置FLASH闪存全局中断0 x0000_0050512可设置RCC复位和时钟控制(RCC)中断0 x0000_0054613可设置EXTI0EXTI线0中断0 x0000_0058714可设置EXTI1EXTI线1中断0 x0000_005C815可设置EXTI2EXTI线2中断0 x0000_0060916可设置EXTI3EXTI线3中断0 x0000_00641017可设置EXTI4EXTI线4中断0 x0000_00681118可设置DMA1通道1DMA1通道1全局中断0 x0000
5、_006C1219可设置DMA1通道2DMA 1通道2全局中断0 x0000_00701320可设置DMA1通道3DMA 1通道3全局中断0 x0000_00741421可设置DMA1通道4DMA 1通道4全局中断0 x0000_00781522可设置DMA1通道5DMA 1通道5全局中断0 x0000_007C1623可设置DMA1通道6DMA 1通道6全局中断0 x0000_00801724可设置DMA1通道7DMA 1通道7全局中断0 x0000_00841825可设置ADCADC全局中断0 x0000_00881926可设置USB_HP_CAN_TXUSB高优先级或CAN发送中断0 x
6、0000_008C2027可设置USB_LP_CAN_RX0USB低优先级或CAN接收0中断0 x0000_00902128可设置CAN_RX1CAN接收1中断0 x0000_00942229可设置CAN_SCECAN SCE中断0 x0000_00982330可设置EXTI9_5EXT I线9:5 中断0 x0000_009C2431可设置TIM1_BRKTIM 1断开中断0 x0000_00A02532可设置TIM1_UPTIM 1更新中断0 x0000_00A42633可设置TIM1_TRG_TIM 1触发和通信中断0 x0000_00A8COM2734可设置TIM1_CCTIM 1捕获
7、比较中断0 x0000_00AC2835可设置TIM2TIM2全局中断0 x0000_00B02936可设置TIM3TIM3全局中断0 x0000_00B43037可设置TIM4TIM4全局中断0 x0000_00B83138可设置I2C1_EVI2C1事件中断0 x0000_00BC3239可设置I2C1_ERI2C1错误中断0 x0000_00C03340可设置I2C2_EVI2C2事件中断0 x0000_00C43441可设置I2C2_ERI2C2错误中断0 x0000_00C83542可设置SPI1SP11全局中断0 x0000_00CC3643可设置SPI2SPI2全局中断0 x00
8、00_00D03744可设置USART1USART1全局中断0 x0000_00D43845可设置USART2USART2全局中断0 x0000_00D83946可设置USART3USART3全局中断0 x0000_00DC4047可设置EXTI15_10EXT I 线15:10中断0 x0000_00E04148可设置RTCAlarm联到EXTI的RTC闹钟中断0 x0000_00E44249可设置USB唤醒联到EXT I的从USB待机唤醒中断0 x0000_00E84350可设置TIM8_BRKTIM8断开中断0 x0000_00EC4451可设置TIM8_UPTIM8更新中断0 x000
9、0_00F04552可设置TIM8_TRG_COMTIM8触发和通信中断0 x0000_00F44653可设置TIM8_CCTIM8捕获比较中断0 x0000_00F84754可设置ADC3ADC3全局中断0 x0000_00FC4855可设置FSMCFSMC全局中断0 x0000_01004956可设置SDIOSDIO全局中断0 x0000_01045057可设置TIM5TIM5全局中断0 x0000_01085158可设置SPI3SPI3全局中断0 x0000_010C5259可设置UART4UART4全局中断0 x0000_01105360可设置UART5UART5全局中断0 x0000
10、_01145461可设置TIM6TIM6全局中断0 x0000_01185562可设置TIM7TIM7全局中断0 x0000_011C5663可设置DMA2通道1DMA2通道1全局中断0 x0000_01205764可设置DMA2通道2DMA2通道2全局中断0 x0000_01245865可设置DMA2通道3DMA2通道3全局中断0 x0000_01285966可设置DMA2通道 4_5DMA2通道4和DMA2通道5全局中断0 x0000_012C6.1.3中断优先级介绍STM32(Cortex-M3)中有两个优先级的概念一一抢占式优先级和响应优先级,有人把响应优先级称 作亚优先级或副优先级,
11、每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或 者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在 处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时 到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应 优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在
12、Cortex-M3中定义了 8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下: 所有8位用于指定响应优先级最高1位用于指定抢占式优先级,最低7位用于指定响应优先级最高2位用于指定抢占式优先级,最低6位用于指定响应优先级最高3位用于指定抢占式优先级,最低5位用于指定响应优先级最高4位用于指定抢占式优先级,最低4位用于指定响应优先级最高5位用于指定抢占式优先级,最低3位用于指定响应优先级最高6位用于指定抢占式优先级,最低2位用于指定响应优先级最高7位用于指定抢占式优先级,最低1位用于指定响应优先级这就是优先级分组的概念。Cortex-M3允许具有较少中断源时使用较少的寄存器位
13、指定中断源的优先级,因此STM32把指定中 断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:第0组:所有4位用于指定响应优先级第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方 式,这个函数的参数有下列5种:NVIC_PriorityGroup_0 = 选择第 0 组NVIC_PriorityG
14、roup_1 = 选择第 1 组NVIC_PriorityGroup_2 = 选择第 2 组NVIC_PriorityGroup_3 = 选择第 3 组NVIC_PriorityGroup_4 = 选择第 4 组接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响 应优先级:/选择使用优先级分组第1组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/使能EXTI0中断NVIC_InitStructure.NVIC_ 旧QChannel = EXTI0_IRQChannel;NVIC_InitStructure.NV
15、IC_旧QChannelPreemptionPriority = 1; / 指定抢占式优先级别 1NVIC_InitStructure.NVIC_旧QChannelSubPriority = 0; / 指定响应优先级别 0NVIC_InitStructure.NVIC_ 旧QChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/使能EXTI9_5中断NVIC_InitStructure.NVIC_ 旧QChannel = EXTI9_5_ 旧QChannel;NVIC_InitStructure.NVIC_旧QChannelPreemption
16、Priority = 0; / 指定抢占式优先级别 0NVIC_InitStructure.NVIC_旧QChannelSubPriority = 1; / 指定响应优先级别 1NVIC_InitStructure.NVIC_ 旧QChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);要注意的几点是:1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想 不到的结果;2)抢占式优先级别相同的中断源之间没有嵌套关系;3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可 以
17、为这个中断源指定任意有效的响应优先级别。6.2外部中断/事件控制器(EXTI)外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输 入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以被独立的 屏蔽。挂起寄存器保持着状态线的中断要求。6.2.1特征EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19个中断/事件请求检测脉冲宽度低于APB2时种宽度的外部信号。参见数据手册中电气特性部分的相关参数。6.2.2唤醒事件管理STM32F10 xxx可以处理外部或内部事件来唤醒内核
18、(WFE)。唤醒事件可以通过下述配置产生:在外设的控制寄存器使能一个中断,但不在NVIC中使能,同时在Cortex-M3的系统控制寄存器 中使能SEVONPEND位。当MCU从WFE恢复后,需要清除相应外设的中断挂起位和外设NVIC 中断通道挂起位(在NVIC中断清除挂起寄存器中)。配置一个外部或内部EXTI线为事件模式,当MCU从WFE恢复后,因为对应事件线的挂起位没 有被置位,不必清除相应外设的中断挂起位或NVIC中断通道挂起位。使用外部I/O端口作为唤醒事件,请参见6.2.3节的功能说明6.2.3功能说明如果要产生中断,必须事先配置好并使能中断线。根据所需的边沿检测条件,设置2个触发寄存
19、器, 同时在中断屏蔽寄存器的相应位写1允许中断请求。当外部中断线上发生了需要的边沿时,将产生一个 中断请求,对应的挂起位也随之被置1。在挂起寄存器的对应位写1,可以清除该中断请求。如果要为产生事件,必须事先配置好并使能事件线。根据所需的边沿检测条件,通过设置2个触发 寄存器,同时在事件屏蔽寄存器的相应位写1允许事件请求。当事件线上发生了需要的边沿时,将产生 一个事件请求脉冲,对应的挂起位不被置1。通过在软件中断/事件寄存器写1,也可以通过软件产生中断/事件请求。6.2.3.1硬件中断选择通过下面的过程来配置19个线路做为中断源:配置19个中断线的屏蔽位(EXTI_IMR)配置所选中断线的触发选
20、择位(EXTI_RTSR和EXTI_FTSR);配置那些控制映像到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得19个中断线 中的请求可以被正确地响应。6.2.3.2硬件事件选择通过下面的过程,可以配置19个线路为事件源配置19个事件线的屏蔽位(EXTI_EMR)。配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR)。6.2.3.3软件中断/事件的选择19个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:配置19个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)。设置软件中断寄存器的请求位(EXTI_SWIER。6.2.4外部中断/事件线路映
21、像112通用I/O端口以图6-2-1的方式连接到16个外部中断/事件线上:另外三种其他的外部中断/事件控制器的连接如下:1. EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USB唤醒事件6.3 NVIC库函数介绍NVIC驱动有多种用途:例如使能或者失能IRQ中断,使能或者失能单独的IRQ通道,改变IRQ 通道的优先级等等。6.3.1 函数 NVIC_DeInit表 6-3-1.描述了函数NVIC_DeInit表 6-3-1. NVIC_DeInit函数名NVIC_DeInit函数原形void NVIC_DeInit(void)功能描述将外设NVIC 器重设
22、为缺省值输入参数1无输出参数无返回值无先决条件无被调用函数无例:复位NVIC寄存器的值NVIC_DeInit();6.3.2 函数NVIC_PriorityGroupConfig表 6-3-2 描述了函数NVIC_PriorityGroupConfig表 6-3-2 NVIC_PriorityGroupConfig函数名NVIC_PriorityGroupConfig函数原形void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)功能描述设置优先级分组:先占优先级和从优先级输入参数NVIC_PriorityGroup:优先级分组位长度输出参数无
23、返回值无先决条件优先级分组只能设置一次被调用函数无NVIC_PriorityGroup该参数设置优先级分组位长度(见表6-3-3.)表6-3-3 NVIC_PriorityGroup值NVIC_PriorityGroup描述NVIC_PriorityGroup_0先占优先级0位从优先级4位NVIC_PriorityGroup_1先占优先级1位 从优先级3位NVIC_PriorityGroup_2先占优先级2位从优先级2位NVIC_PriorityGroup_3先占优先级3位 从优先级1位NVIC_PriorityGroup_4先占优先级4位从优先级0位例:定义先占优先级1位,从优先级3位NVI
24、C_PriorityGroupConfig(NVIC_PriorityGroup_1);函数NVIC_Init表6-3-4描述了函数NVIC_Init表 6-3-4 NVIC_Init函数名NVIC_Init函数原形void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)功能描述根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器输入参数NVIC_InitStruct:指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置 信息输出参数无返回值RCC_FLAG的新状态(SET或者RESET先决条件无被调用函数无NVI
25、C_InitTypeDef structure 结构体typedef structu8 NVIC_IRQChannel;u8 NVIC_IRQChannelPreemptionPriority;u8 NVIC_IRQChannelSubPriority;FunctionalState NVIC_IRQChannelCmd; NVIC_InitTypeDef;NVIC_IRQChannel :该参数用以使能或者失能指定的IRQ通道。表6-3-5给出了该参数可取的值表 6-3-5 NVIC IRQChanne值NVIC_IRQChannel描述WWDG_IRQChannel窗口看门狗中断PVD_I
26、RQChannelPVD通过EXTI探测中断TAMPER_ 旧QChannel篡改中断RTC_IRQChannelRTC全局中断FlashItf_ 旧QChannelFLASH全局中断RCC_ 旧QChannelRCC全局中断EXTI0_ 旧QChannel外部中断线0中断EXTI1_ 旧QChannel外部中断线1中断EXTI2_ 旧QChannel外部中断线2中断EXTI3_ 旧QChannel外部中断线3中断EXTI4_ 旧QChannel外部中断线4中断DMAChannel1_IRQChannelDMA通道1中断DMAChannel2_ 旧QChannelDMA通道2中断DMAChan
27、nel3_ 旧QChannelDMA通道3中断DMAChannel4_ 旧QChannelDMA通道4中断DMAChannel5_ 旧QChannelDMA通道5中断DMAChannel6_ 旧QChannelDMA通道6中断DMAChannel7_ 旧QChannelDMA通道7中断ADC_ 旧QChannelADC全局中断USB_HP_CANTX_IRQChannelUSB高优先级或者CAN发送中断USB_LP_CAN_RX0_IRQChannelUSB低优先级或者CAN接收0中断CAN_RX1R QChannelCAN接收1中断CAN_SCE_IRQChannelCAN SCE中断EXT
28、I9_5_IRQChannel外部中断线9-5中断TIM1_BRK_IRQChannelTIM 1暂停中断TIM1_UP_IRQChannelTIM 1刷新中断TIM1_TRG_COM_IRQChannelTIM 1触发和通讯中断TIM1_CC_ 旧QChannelTIM 1捕获比较中断TIM2_ 旧QChannelTIM2全局中断TIM3_ 旧QChannelTIM3全局中断TIM4_ 旧QChannelTIM4全局中断I2C1_EV_ 旧QChannelI2C1事件中断I2C1_ER_IRQChannelI2C1错误中断I2C2_EV_ 旧QChannelI2C 2事件中断I2C2_ER_
29、IRQChannelI2C 2错误中断SPI1_IRQChannelSP11全局中断SPI2_ 旧QChannelSPI2全局中断USART1_IRQChannelUSART1全局中断USART2_IRQChannelUSART2全局中断USART3_IRQChannelUSART3全局中断EXTI15_10_IRQChannel外部中断线15-10中断RTCAlarm_IRQChannelRTC闹钟通过EXTI线中断USBWakeUp_IRQChannelUSB通过EXTI线从悬挂唤醒中断TIM8_BRK_IRQChannelTIM8暂停中断TIM8_UP_IRQChannelTIM8刷新中
30、断TIM8_TRG_COM_IRQChannelTIM8触发和通讯中断TIM8_CC_IRQChannelTIM8捕获比较中断ADC3_IRQChannelADC3全局中断FSMC_IRQChannelFSMC全局中断SDIO_IRQChannelSDIO全局中断TIM5_IRQChannelTIM5全局中断SPI3_IRQChannelSPI3全局中断UART4_IRQChannelUART4全局中断UART5_IRQChannelUART5全局中断TIM6_IRQChannelTIM6全局中断TIM7_IRQChannelTIM7全局中断DMA2_Channel1_IRQChannelDM
31、A2 Channel 1全局中断DMA2_Channel2_IRQChannelDMA2 Channel 2全局中断DMA2_Channel3_IRQChannelDMA2 Channel 3全局中断NVIC_IRQChannelPreemptionPriority :该参数设置了成员NVIC_旧QChannel中的先占优先级,表 6-3-6列举了该参数的取值。NVIC_IRQChannelSubPriority :该参数设置了成员NVIC_旧QChannel中的从优先级,表6-3-6列举了 该参数的取值。表6-3-6给出函数NVIC_PriorityGroupConfig设置的先占优先级和从
32、优先级可取的值。表6-3-6先级和从优先级值(1)(2)NVIC_PriorityGroupNVIC_IRQChannel的先占优先级NVIC_IRQChannel的从优先级描述NVIC_PriorityGroup_000-15先占优先级0位从优先级4位NVIC_PriorityGroup_10-10-7先占优先级1位从优先级3位NVIC_PriorityGroup_20-30-3先占优先级2位 从优先级2位NVIC_PriorityGroup_30-70-1先占优先级3位 从优先级1位NVIC_PriorityGroup_40-150先占优先级4位 从优先级0位选中NVIC_Priority
33、Group_0,则参数NVIC_IRQChannelPreemptionPriority对中断通道的设置不产 生影响。选中NVIC_PriorityGroup_4,则参数NVIC_旧QChannelSubPriority对中断通道的设置不产生影响。NVIC_IRQChannelCmd :该参数指定了在成员NVIC_旧QChannel中定义的IRQ通道被使能还是失能。 这个参数取值为ENABLE或者DISABLE。例:NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /先占优先级
34、用1 位,从优先级用3位。定义TIM3中断的优先级,先占优先级为0,从优先级为2NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure(&NVIC_InitStructure);定义USART1串口中断的
35、优先级,先占优先级为1,从优先级为5NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;NVIC_InitStructure(&NVIC_InitStructure);定义RTC中断先占优先级为1,从优先级为7NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;NVIC_In
36、itStructure.NVIC_IRQChannelSubPriority = 7;NVIC_InitStructure(&NVIC_InitStructure);6.3.4 函数NVIC_SetVectorTable表 6-3-7描述了函数NVIC_SetVectorTable表 6-3-7 NVIC_SetVectorTable函数名NVIC_SetVectorTable函数原形void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)功能描述设置向量表的位置和偏移输入参数1NVIC_VectTab :指定向量表位置在RAM还是在程序存储
37、器输入参数2Offset:向量表基地址的偏移量对FLASH,该参数值必须高于0 x08000100;对RAM必须高于0 x100。它同时必须是256(64x4)的整数倍输出参数无返回值指定中断活动位的新状态(SET或者RESET)先决条件优先级分组只能设置一次被调用函数无NVIC_VectTab :该参数设置向量表基地址(见 表6-3-8)表 6-3-8 NVIC VectTabttNVIC_ VectTab描述NVIC_VectTab_FLASH向量表位于FLASHNVIC_VectTab_RAM向量表位于RAM例:指定向量表基地址偏移量对FLASHNVIC_SetVectorTable(N
38、VIC_VectTab_FLASH, 0 x0);6.4外部中断控制器库函数6.4.1 函数 EXTI_DeInit表 6-4-1 描述了 函数 EXTI_DeInit表 6-4-1 EXTI_DeInit函数名EXTI_DeInit函数原形void EXTI_DeInit(void)功能描述将外设EXTI寄存器重设为缺省值输入参数CAN_FLAG:待检查的CAN标志位输出参数无返回值无先决条件无被调用函数无例:重设外部中断寄存器EXTI_DeInit();6.4.2 函数 EXTI_Init表6-4-2描述了函数EXTI_Init表 6-4-2 函数 EXTI_Init函数名EXTI_Ini
39、t函数原形void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)功能描述根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器输入参数EXTI_InitStruct:指向结构EXTI_InitTypeDef的指针,包含了外设EXTI的配置信息输出参数无返回值无先决条件无被调用函数无EXTI_InitTypeDef structure 结构体如下typedef structu32 EXTI_Line;EXTIMode_TypeDef EXTI_Mode;EXTIrigger_TypeDef EXTI_Trigger;Functional
40、State EXTI_LineCmd; EXTI_InitTypeDef;EXTI_Line:选择了待使能或者失能的外部线路。表6-4-3给出了该参数可取的值表 6-4-3 EXTI_Line 值EXTI_Line描述EXTI_Line0外部中断线0EXTI_Line1外部中断线1EXTI_Line2外部中断线2EXTI_Line3外部中断线3EXTI_Line4外部中断线4EXTI_Line5外部中断线5EXTI_Line6外部中断线6EXTI_Line7外部中断线7EXTI_Line8外部中断线8EXTI_Line9外部中断线9EXTI_Line10外部中断线10EXTI_Line11外部
41、中断线11EXTI_Line12外部中断线12EXTI_Line13外部中断线13EXTI_Line14外部中断线14EXTI_Line15外部中断线15EXTI_Line16外部中断线16EXTI_Line17外部中断线17EXTI_Line18外部中断线18EXTI_Mode:设置了被使能线路的模式。表6-4-4给出了该参数可取的值表 6-4-4. EXTI_Mode 值EXTI_Mode描述EXTI_Mode_Event设置EXTI线路为事件请求EXTI_Mode_Interrupt设置EXTI线路为中断请求EXTI_Trigger :设置了被使能线路的触发边沿。表6-4-5,给出了该参
42、数可取的值表 6-4-5 EXTI_Trigger 值EXTI_Trigger描述EXTI_Trigger_Falling设置输入线路下降沿为中断请求EXTI_Trigger_Rising设置输入线路上升沿为中断请求EXTI_Trigger_Rising_Falling设置输入线路上升沿和下降沿为中断请求EXTI_LineCmd :用来定义选中线路的新状态。它可以被设为ENABLE或者DISABLE。例:使能外部中断12和14EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line12 | EXTI
43、_Line14;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);函数 EXTI_GenerateSWInterrupt表 6-4-6.描述了 函数 EXTI_GenerateSWInterrupt函数名EXTI_GenerateSWInterrupt函数原形void EXTI_Generat
44、eSWInterrupt(u32 EXTI_Line)功能描述产生一个软件中断输入参数EXTI_Line:待使能或者失能的EXTI线路输出参数无返回值无先决条件无被调用函数无例:产生一个软件中断EXTI_GenerateSWInterrupt(EXTI_Line6);函数 EXTI_GetFlagStatus表 6-4-7.描述了 函数 EXTI_GetFlagStatus函数名EXTI_GetFlagStatus函数原形FlagStatus EXTI_GetFlagStatus(u32 EXTI_Line)功能描述检查指定的EXTI线路标志位设置与否输入参数EXTI_Line:待检查的EXT
45、I线路标志位输出参数无返回值EXTI_Line 的新状态(SET 或者 RESET)先决条件无被调用函数无例:检查外部中断线8状态位FlagStatus EXTIStatus;EXTIStatus = EXTI_GetFlagStatus(EXTI_Line8);函数 EXTI_ClearFlag表 6-4-8 描述了 函数 EXTI_ClearFlag函数名EXTI_ClearFlag函数原形void EXTI_ClearFlag(u32 EXTI_Line)功能描述清除EXTI线路挂起标志位输入参数EXTI_Line:待清除标志位的EXTI线路输出参数无返回值无先决条件无被调用函数无例:清
46、除外部中断2挂起标志EXTI_ClearFlag(EXTI_Line2);函数 EXTI_GetITStatus表 6-4-9,描述了 函数 EXTI_GetITStatus函数名EXTI_GetITStatus函数原形ITStatus EXTI_GetITStatus(u32 EXTI_Line)功能描述检查指定的EXTI线路触发请求发生与否输入参数EXTI_Line:待检查EXTI线路的挂起位输出参数无返回值EXTI_Line 的新状态(SET 或者 RESET)先决条件无被调用函数无例:检查外部中断8是否有中断触发ITStatus EXTIStatus;EXTIStatus = EXTI
47、_GetITStatus(EXTI_Line8);6.5 外部中断实验6.5.1实验目的实验目的是如何使用外部中断。具体内容包括使用库函数来定义外部中断口,如何设置中断的优 先级顺序,如何验证中断函数进入和执行。6.5.2实验要求STM32F10X系列芯片的每一个I/O 口,都可以设为外部中断口,最多有16个外部中断。设定PE0 和PE1为外部中断口,外部中断0下降沿触发中断,外部中断1上升沿触发中断。在中断函数中跳变LED 灯,以标记进入中断函数,同时向串口发送一数据。进入外部中断0,跳变LED1灯,向串口发送0X61; 进入外部中断1,LED2跳变,向串口发送0X62数据。6.5.3硬件基
48、础图6-5-1是外部中断引脚的硬件电路图,K1按键,PE0引脚为外部中断0,K2按键,PE1引脚为外 部中断1。由图中可以看出,常态下PE0引脚电平为高,按键K1按下时为低;常态下PE1引脚为高,按 键K2按下后为低。也就是对于外部中断0,按下K1按键时有一个下降沿,松开按键时,有一个上升沿。 对于外部中断1,同样,按下K2按键时有一个下降沿,松开按键时有一个上升沿。图6-5-1按键原理图6.5.4软件结构前面介绍了外部中断控制器和嵌套向量中断控制器的库函数,通过使用这些库函数,可以初始化外 部中断和定义这些外部中断的优先级。当然只有前面简单的介绍这些枯燥的库函数的定义和作用,您可 能还是不会
49、完整的初始化外部中断。回忆一下使用外设GPIO的情况,总结出,要使用一个外设,需要有几个方面要注意到。要使用外部 中断外设,需要在处理这几个方面,现列出来如下:在工程中要加入外部中断库文件stm32f10 x_exti.c (加入FWLIB文件组);直接在项目工程中, 从librarysrc文件夹中添加stm32f10 x_exti.c文件到项目工程的FWLIB文件组即可完成;在项目工程中,打开头文件stm32f10 x_conf.h,找到“/ #define _EXTI”所在的行,在这个头 文件中删去注释符即可变成“ #define _EXTI”即可;根据系统对该功能的需求,初始化该功能外设
50、;初始化I/O 口为外部中断口。初始化外部中断 口,相对比较简单。首先定义PE0和PE1作外部中断用,可用如下代码设置:GPIO_EXTILineConfig(GPIO_PortSource_GPIOE, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSource_GPIOE, GPIO_PinSource1);随后定义使用外部中断号,中断触发沿,和使能中断,可以如下设置:EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitSt
51、ructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_ Trigger_Falling; /下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line1; /外部中断 1EXTI_InitStructure.EXTI_Mode = EXTI_Mo
52、de_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; 上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);在NVIC_Configuration()函数中,配置使能外部中断的优先级。在NVIC的初始化中,已经使 用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)语句配置先占优先级使用2个位。要使用 外部中断,还得给外部中断配置一定的优先级。把外部中断0配置为3先占优先
53、级,1响应优 先级;把外部中断1配置为3先占优先级,2响应优先级。具体配置如下:NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; /外部中断 0NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =3; /先占优先级为 3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; /从优先级为 1 NVIC_InitStructure.NVIC_IRQChannelC
54、md = ENABLE;NVIC_InitStructure(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; /外部中断 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; /从优先级为 2 NVIC_Init(&NVIC_InitStructure);在stm32f10 x_it.c文件中加入相应外部的中断执行语句。在stm32f10 x_it.c文件中找到外部中断 0和外部中断1的中断函数,在这里面加入要写的代码即可。如翻转LED和向
55、串口发送数据。完成这几项,就完整的设置好了要使用的外部中断。6.5.5实例代码外部中断程序,以E:OpenM3V开发板测试程序SysTickkey_usart文件夹中的按键实例代码为基 础来进行添改。首先创建E:OpenM3V开发板测试程序EXTIexti1文件夹,把E:OpenM3V开发板测试程 序SysTickkey_usart文件夹中的工程复制到E:OpenM3V开发板测试程序EXTIexti1文件夹中,并进 行验证。在gpio.c文件中,建立一个外部中断的初始化函数Exti_Init(),在函数中加入初始化代码,在gpio.h 文件中,加入void Exti_Init(void);在中
56、断函数中,加入相应的代码。具体程序如下:/外部中断初始化函数void Exti_Init(void)EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_EXTILineConfig(GPIO_PortSource_GPIOE, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSource_GPIOE, GPIO_PinSource1);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructu
57、re.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_ Trigger_Falling; /下降沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line1;/外部中断 1EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Inte
58、rrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; 上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; /外部中断 0NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =3; /先占优先级为 3NVIC_InitStructure.NVIC_IRQChanne
59、lSubPriority = 1; /从优先级为 1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel/外 卜部中断 1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; /从优先级为 2 NVIC_InitStructure(&NVIC_InitStructure);/外部中断0的中断函数void EXTI0_IR
60、QHandler(void)if(EXTI_GetITStatus(EXTI_Line0) != RESET)EXTI_ClearITPendingBit(EXTI_Line0); /清外部中断 0LED1B();uart_trxuart_rx = 0 x61;uart_rx+;uart_rx &= 0 xf;/外部中断1的中断函数void EXTI1_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line1) != RESET)EXTI_ClearITPendingBit(EXTI_Line1);/清外部中断 1LED2B();uart_trxuart_r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 周末安全提醒:请老师转给学生和家长(3.15-3.16)
- 运动会闭幕式校长讲话稿15篇
- 小学三年级数学三位数乘以一位数综合监控模拟题带答案
- 二年级数学100以内三数加减法混合运算题竞赛测试训练题大全附答案
- 盾构操作培训
- 金龙创业团队介绍
- 医院健康教育
- 酒类消防安全知识
- 中华茶艺知到课后答案智慧树章节测试答案2025年春浙江农业商贸职业学院
- 输血反应临床表现
- Vue.js前端开发实战(第2版)全套完整教学课件
- 2023年江苏海洋大学招考聘用专职辅导员26人模拟预测(共500题)笔试参考题库附答案详解
- 【教案】第4单元++基因的表达++单元教学设计高一下学期生物人教版必修2
- 错牙合畸形的早期矫治
- 小学数学-乘法分配律教学课件设计
- 身份证籍贯自动对照自动生成
- DG-TJ 08-2367-2021 既有建筑外立面整治设计标准
- 教育测量与评价智慧树知到答案章节测试2023年石河子大学
- 全国各主要红色教育基地
- 2023年新HSK5级考试真题考试
- 应用文写作课件:3投诉信letter of complaint
评论
0/150
提交评论