STM32ARM讲义第6章中断系统原理及外中断(EXTI)应用2015.3第6章中断系统原理及外中断应用主要内容STM32中断通道STM32中断过程NVIC中断控制器结构、寄存器及库函数EXTI外中断控制器结构、寄存器及库函数EXTI外中断应用实例6.1STM32中断通道主要内容中断通道概念STM32中断分类STM32中断向量表中断号的定义中断处理函数名的定义6.1.1中断通道中断通道:是传递、处理中断的信息通道中断通道的主要特征:1)一般,中断通道对应有唯一的中断号、中断优先级、中断向量、服务程序;2)1个中断通道可以有多个中断源,每个中断源有对应的中断处理程序如MCS-51单片机的串行口、T26.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个通道。STM32中断系统结构NMI外部中断SRM32微控制器CPU异常NVIC……EXTI0~15EXTI10~15EXTI5~9EXTI0~4片内设备43~68个EXTI控制器保留6.1.3中断向量表一、系统中断及优先级数量1、NVIC嵌套式中断控制器可管理256个中断,有256个中断级。2、CM3内核中有15个异常或中断(无0号),因此可以有240个设备中断。3、STM32F10x微控制器中STM32F103只有60个设备中断,STM32F107有68个设备中断。管理中断优先级只用寄存器中的4位,只能有16个优先级(包括主、次优先级)。STM32F10x系列中断优先级会有相同的。优先级相同时要参考设备编号,小者优先。二、中断向量表——内核部分编号中断通道名说明偏移地址——MSP0x0000Reset复位(优先级:-3)0x0004-14NMI非屏蔽(优先级:-2)0x0008-13硬件失效所有类别的失效(优先级:-1)0x000C-12存储管理存储器管理0x0010-11总线错误存储器访问0x0014-10错误应用未定义指令非法状态0x0018-9~-6——保留0x001C~0x0028-5SVCall软中断指令中断0x002C-4调试监控调试监控器0x0030-3——保留0x0034-2PendSV可挂起的系统服务0x0038-1SysTick系统滴答定时器0x003C三、中断向量表——设备部分1编号中断通道名说明偏移地址0WWDG窗口看门狗定时器中断0x00401PVD电源电压检测接EXTI16引脚0x00442TAMPER侵入检测中断0x00483RTC实时钟全局中断0x004C4FLASH闪存全局中断0x00505RCC复位和时钟控制中断0x00546EXTI0外部设备通道0中断0x00587EXTI1外部设备通道1中断0x005C8EXTI2外部设备通道2中断0x00609EXTI3外部设备通道3中断0x006410EXTI4外部设备通道4中断0x006811DMACh1DMA通道1全局中断0x006C12DMACh20x0070三、中断向量表——设备部分2编号中断通道名称说明偏移地址13DMACh30x007414DMACh40x007815DMACh5DMA通道5全局中断0x007C16DMACh60x008017DMACh70x008418ADC1-2ADC1-2全局中断0x008819USB_HP/CAN_TXUSB高/低优先级中断或CAN发/收中断0x008C20USB_LP/CAN_RX00x009021CAN_RX10x009422CAN_SCECAN的SCE中断0x009823EXTI9_5外部中断9~5通道0x009C24TIM1_BRKTIM1刹车中断0x00A025TIM1_UPTIM1更新中断0x00A4三、中断向量表——设备部分3编号中断通道名称说明偏移地址25TIM1_UPTIM1更新中断0x00A426TIM1_TRG_COMTIM1触发和通信0x00A827TIM1_CCTIM1捕获比较中断0x00AC28TIM20x00B029TIM3TIM3全局中断0x00B430TIM40x00B831IIC1_EVIIC1事件中断0x00BC32IIC1_ERIIC1错误中断0x00C033IIC2_EV0x00C434IIC2_ER0x00C835SPI1SPI1全局中断0x00CC36SPI20x00D037USART1USART1全局中断0x00D4三、中断向量表——设备部分4编号中断通道名称说明偏移地址37USART10x00D438USART2USART2全局中断0x00D839USART30x00DC40EXTI15-10外部中断15~10通道0x00E041RTCAlarm连接到EXTI17引脚0x00E442USBWakeUp连接到EXTI18引脚0x00E843TIM8_BRKTIM8刹车中断0x00EC44TIM8_UPTIM8更新中断0x00F045TIM8_TRG_COMTIM8触发和通信0x00F446TIM8_CCTIM8捕获比较中断0x00F847ADC3ADC3全局中断0x00FC48FSMCFSMC全局中断0x010049SDIOSDIO全局中断0x0104三、中断向量表——设备部分5编号中断源名称说明偏移地址49SDIOSDIO全局中断0x010450TIM5TIM5全局中断0x010851SPI3SPI3全局中断0x010C52UART4UART4全局中断0x011053UART50x011454TIM60x011855TIM70x011C56DMA2Ch1DMA2Ch1全局中断0x012057DMA2Ch20x012458DMA2Ch30x012859DMA2Ch40x012C60DMA2Ch50x013061ETH以太网全局中断0x0134三、中断向量表——设备部分6编号中断源名称说明偏移地址61ETH以太网全局中断0x013462ETH_WKUP以太网唤醒接EXTI19引脚0x013863CAN2_TXCAN2发送中断0x013C64CAN2_RX00x014065CAN2_RX1CAN2接收1中断0x014466CAN2_SCE0x014867OTG_FS全速的USBOTG全局中断0x014C6.1.4中断通道名、中断号定义stm32f10x.h中定义,应用时使用宏名即可。typedefenumIRQn{/**Cortex-M3ProcessorExceptionsNumbers**/NonMaskableInt_IRQn=-14,MemoryManagement_IRQn=-12,BusFault_IRQn=-11,UsageFault_IRQn=-10,SVCall_IRQn=-5,DebugMonitor_IRQn=-4,PendSV_IRQn=-2,SysTick_IRQn=-1,/***STM32specificInterruptNumbers***/WWDG_IRQn=0,PVD_IRQn=1,TAMPER_IRQn=2,RTC_IRQn=3,FLASH_IRQn=4,RCC_IRQn=5,EXTI0_IRQn=6,EXTI1_IRQn=7,EXTI2_IRQn=8,EXTI3_IRQn=9,EXTI4_IRQn=10,DMA1_Channel1_IRQn=11,DMA1_Channel2_IRQn=12,……DMA1_Channel7_IRQn=17,#ifdefSTM32F10X_HDADC1_2_IRQn=18,USB_HP_CAN1_TX_IRQn=19,USB_LP_CAN1_RX0_IRQn=20,CAN1_RX1_IRQn=21,CAN1_SCE_IRQn=22,EXTI9_5_IRQn=23,TIM1_BRK_IRQn=24,TIM1_UP_IRQn=25,……TIM7_IRQn=55,DMA2_Channel1_IRQn=56,DMA2_Channel2_IRQn=57,DMA2_Channel3_IRQn=58,DMA2_Channel4_5_IRQn=59#endif/*STM32F10X_HD*/}IRQn_Type;6.1.5中断服务函数名的定义在startup_stm32f10x_hd.s中的中断向量表中定义,设计中断服务程序时必须要使用。AREARESET,DATA,READONLYEXPORT__VectorsEXPORT__Vectors_EndEXPORT__Vectors_Size__VectorsDCD__initial_sp;TopofStackDCDReset_Handler;ResetHandlerDCDNMI_Handler;NMIHandlerDCDHardFault_Handler;HardFaultHandlerDCDMemManage_HandlerDCDBusFault_Handler;BusFaultHandler中断入口地址标号即中断服务函数名stm32f10x_it.c中断服务函数文件内容voidNMI_Handler(void){}voidHardFault_Handler(void){while(1){}}中断处理过程中断向量表保存返回地址保存CPU状态保存寄存器取中断向量执行中断服务程序中断返回6.3NVIC硬件结构及软件配置主要内容NVIC硬件结构STM32中断优先级NVIC寄存器NVIC初始化结构NVIC常用的库函数STM32中断系统结构NMI外部中断SRM32微控制器CPU异常NVIC……EXTI0~15EXTI10~15EXTI5~9EXTI0~4片内设备43~68个EXTI控制器保留6.3.1NVIC嵌套式中断控制器结构中断挂起:即设置中断请求标志全局屏蔽外部中断……EXTI控制器NVIC中的全局屏蔽(寄存器)CPU中的特殊功能寄存器PRIMASK和FAULTMASK1、使用PRIMASK屏蔽掉所有的外中断和软故障,除了NMI和handfault。相当于MCS-51中的EA。2、使用FAULTMASK屏蔽掉所有的外中断和故障,除了NMI。相当于MCS-51中的EA。3、使用BASEPRI屏蔽掉等于和低于某个优先级的中断。6.3.2STM32中断优先级一、优先级规则1)中断优先级分为两个部分占先优先级(PreemptionPriority)和副(次)优先级(Subpriority)。2)高占先优先级的中断可以打断低占先优先级的中断服务,从而构成嵌套;相同占先优先级的中断之间不能构成中断嵌套。3)次优先级不能够构成中断嵌套;占先优先级相同,而次优先级不同的中断同时发生时,首先响应次优先级高的中断。4)占先优先级和次优先级相同的中断同时发生时,首先响应编号小的中断。二、优先级分组设置应用中断复位控制AIRCR优先级控制说明无占先优先级16个次优先级2个占先级8个次优先级4个占先级4个次优先级8个占先级2个次优先级16个占先级无次优先级优先级分组宏定义(在misc.h中)#defineNVIC_PriorityGroup_0((uint32_t)0x700)#defineNVIC_PriorityGroup_1((uint32_t)0x600)#defineNVIC_PriorityGroup_2((uint32_t)0x500)#defineNVIC_PriorityGroup_3((uint32_t)0x400)#defineNVIC_PriorityGroup_4((uint32_t)0x300)misc.h、m