嵌入式系统设计(STM32)第4讲ppt课件

上传人:文**** 文档编号:240768857 上传时间:2024-05-06 格式:PPT 页数:56 大小:425.69KB
返回 下载 相关 举报
嵌入式系统设计(STM32)第4讲ppt课件_第1页
第1页 / 共56页
嵌入式系统设计(STM32)第4讲ppt课件_第2页
第2页 / 共56页
嵌入式系统设计(STM32)第4讲ppt课件_第3页
第3页 / 共56页
点击查看更多>>
资源描述
第第4讲讲 中断中断n第第4讲讲 中断中断实验三实验三 独立按键控制独立按键控制n实验目的:掌握独立按键的工作原理及按键控实验目的:掌握独立按键的工作原理及按键控制程序的编写方法。制程序的编写方法。n实验内容:实验内容:PA口的四个按键,任意键闭合,口的四个按键,任意键闭合,4个个LED灯呈现不同的显示状态。灯呈现不同的显示状态。n实验三实验三 独立按键控制实验目的:掌握独立按键的工作原理及按键独立按键控制实验目的:掌握独立按键的工作原理及按键实验四实验四 按键中断实验按键中断实验n实验目的:掌握实验目的:掌握STM32中断系统的工作原理,中断系统的工作原理,掌握利用函数库编写中断初始化程序与中断服掌握利用函数库编写中断初始化程序与中断服务程序的方法。务程序的方法。n实验内容实验内容:(1)选选4个独立按键中任意一个作为外部中断输个独立按键中任意一个作为外部中断输入,入,4个个LED正常以流水灯点亮,按键闭合后,正常以流水灯点亮,按键闭合后,4个灯同时循环亮灭个灯同时循环亮灭4次,重新回到流水灯状态。次,重新回到流水灯状态。(2)中断嵌套实验。主循环是流水灯,按键)中断嵌套实验。主循环是流水灯,按键1中中断,断,4个灯同时循环亮灭个灯同时循环亮灭10次;按键次;按键2可以在中可以在中断按键断按键1的程序,的程序,1、3和和2、4灯交替点亮灯交替点亮5次。次。n实验四实验四 按键中断实验实验目的:掌握按键中断实验实验目的:掌握STM32中断系统的工作中断系统的工作实验五 键盘识别与数码显示n实验目的:掌握矩阵键盘的按键识别原理,以及数码管显示的方法。n实验内容:将矩阵键盘上的按键编号显示在数码管上。(1)只用1位显示。(2)每按键一次,显示向左移一位,最多显示6位。n接口电路参见光盘资料n实验五实验五 键盘识别与数码显示实验目的:掌握矩阵键盘的按键识别原键盘识别与数码显示实验目的:掌握矩阵键盘的按键识别原主要内容主要内容n4.1 4.1 基本概念基本概念n4.2 4.2 中断源中断源 n4.3 4.3 中断优先级中断优先级n4.4 STM324.4 STM32中断寄存器中断寄存器n4.5 STM324.5 STM32中断库函数中断库函数n4.6 4.6 中断编程举例中断编程举例n4.7 4.7 练习题练习题n主要内容主要内容4.1 基本概念基本概念4.1 4.1 基本概念基本概念 n中断是指由于内部或者外部事件使中断是指由于内部或者外部事件使CPU暂停当前程序,暂停当前程序,转去执行中断服务程序的一种工作机制。转去执行中断服务程序的一种工作机制。n中断系统由中断源、中断控制、中断响应几部分组成。中断系统由中断源、中断控制、中断响应几部分组成。n中断源:中断请求的来源。中断源:中断请求的来源。n中断控制:中断的允许中断控制:中断的允许/禁止,中断优先级与优先级嵌套。禁止,中断优先级与优先级嵌套。n中断响应:保护断点,转去执行中断服务程序。中断响应:保护断点,转去执行中断服务程序。返回返回n4.1 基本概念基本概念 中断是指由于内部或者外部事件使中断是指由于内部或者外部事件使CPU暂停当暂停当4.2 4.2 中断源中断源nARM cortex_m3内核支持内核支持256个中断(个中断(16个内核个内核+240外部)和可编程外部)和可编程256级中断优先级的设置,与其相关的级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(中断控制和中断优先级控制寄存器(NVIC、SYSTICK等)也都属于等)也都属于cortex_m3内核的部分。内核的部分。nSTM32采用了采用了cortex_m3内核,但内核,但STM32并没有使用并没有使用cortex_m3内核全部的东西(如内存保护单元内核全部的东西(如内存保护单元MPU等),等),因此它的因此它的NVIC是是cortex_m3内核的内核的NVIC的子集。的子集。n STM32目前支持的中断共为目前支持的中断共为84个(个(16个内核个内核+68个外部)个外部),和,和16级(使用了级(使用了4位中断优先级控制)可编程中断优位中断优先级控制)可编程中断优先级的设置。先级的设置。n4.2 中断源中断源ARM cortex_m3内核支持内核支持256个中断个中断异常和中断的概念异常和中断的概念n中断:该请求信号来自中断:该请求信号来自CM3内核的外面,来自内核的外面,来自各种片上外设和外扩的外设。各种片上外设和外扩的外设。n异常:是因异常:是因CM3内核的活动产生的,即执行指内核的活动产生的,即执行指令或访问存储器时产生。令或访问存储器时产生。CM3有有15个异常,类个异常,类型号为型号为115,没有编号为,没有编号为0的异常。的异常。n挂起:一个发生的异常不能被立即响应,就称挂起:一个发生的异常不能被立即响应,就称它为挂起。它为挂起。n异常和中断的概念中断:该请求信号来自异常和中断的概念中断:该请求信号来自CM3内核的外面,来自各内核的外面,来自各中断的特点中断的特点n对于互联型产品,外部中断对于互联型产品,外部中断/事件控制器由事件控制器由20个产生事个产生事件件/中断请求的边沿检测器组成,对于其它产品,则有中断请求的边沿检测器组成,对于其它产品,则有19个能产生事件个能产生事件/中断请求的边沿检测器。中断请求的边沿检测器。n每个输入线可以独立地配置输入类型每个输入线可以独立地配置输入类型(脉冲或挂起脉冲或挂起)和对和对应的触发事件应的触发事件(上升沿或下降沿或者双边沿都触发上升沿或下降沿或者双边沿都触发)。n每个输入线都可以独立地被屏蔽。每个输入线都可以独立地被屏蔽。n挂起寄存器保持着状态线的中断请求。挂起寄存器保持着状态线的中断请求。n中断的特点对于互联型产品,外部中断中断的特点对于互联型产品,外部中断/事件控制器由事件控制器由20个产生事个产生事外部中断(外部中断(EXTI)n外部中断外部中断/事件控制器(事件控制器(EXTI)有)有19个中断请求边沿检测器。个中断请求边沿检测器。n每个中断每个中断/事件都有独立的触发和屏蔽事件都有独立的触发和屏蔽 n每个中断线都有专用的状态位每个中断线都有专用的状态位 nEXTI0-EXTI15:连到:连到IO端口,每个端口,每个EXTIj对应对应GPIOx的引脚的引脚j。通过软。通过软件配置,设定中断来自哪个引脚。件配置,设定中断来自哪个引脚。nEXTI16:PVD(programmable voltage detector)输出)输出nEXTI17:RTC(real-time clock)闹钟事件)闹钟事件nEXTI18:USB唤醒事件唤醒事件nEXTI19:连接到以太网唤醒事件:连接到以太网唤醒事件(只适用于互联型产品只适用于互联型产品)n外部中断(外部中断(EXTI)外部中断)外部中断/事件控制器(事件控制器(EXTI)有)有19个个n硬件中断选择通过下面的过程来配置硬件中断选择通过下面的过程来配置19个线路个线路做为中断源:做为中断源:n配置配置19个中断线的屏蔽位个中断线的屏蔽位(EXTI_IMR)n配置所选中断线的触发选择位配置所选中断线的触发选择位(EXTI_RTSR和和EXTI_FTSR);n配置对应到外部中断控制器配置对应到外部中断控制器(EXTI)的的NVIC中断通道中断通道的使能和屏蔽位,使得的使能和屏蔽位,使得19个中断线中的请求可以被个中断线中的请求可以被正确地响应。正确地响应。n硬件中断选择通过下面的过程来配置硬件中断选择通过下面的过程来配置19个线路做为中断源:个线路做为中断源:外部中断外部中断/事件控制器框图事件控制器框图n外部中断外部中断/事件控制器框图事件控制器框图n要产生中断,必须先配置好并使能中断线。根据需要的要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置边沿检测设置2个触发寄存器,同时在个触发寄存器,同时在中断屏蔽寄存器中断屏蔽寄存器的相应位写的相应位写1允许中断请求。允许中断请求。n当外部中断线上发生了期待的边沿时,将产生一个中断当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置请求,对应的挂起位也随之被置1。在挂起寄存器在挂起寄存器的对应位写的对应位写1,可以清除它,也可以通过改变边沿,可以清除它,也可以通过改变边沿检测的极性清除。检测的极性清除。n如果需要产生事件,必须先配置好并使能事件线。根据如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置需要的边沿检测通过设置2个触发寄存器,同时在事件个触发寄存器,同时在事件屏蔽寄存器的相应位写屏蔽寄存器的相应位写1允许事件请求。允许事件请求。n当事件线上发生了需要的边沿时,将产生一个事件请求当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置脉冲,对应的挂起位不被置1。通过在软件中断通过在软件中断/事事件寄存器写件寄存器写1,也可以通过软件产生中断,也可以通过软件产生中断/事件请求。事件请求。n要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置112通用通用I/O端口以下图的方式连接到端口以下图的方式连接到16个外部中断个外部中断/事件线上:事件线上:n112通用通用I/O端口以下图的方式连接到端口以下图的方式连接到16个外部中断个外部中断/事件线事件线EXTICR:外部中断线路外部中断线路0-15配置寄存器配置寄存器n有有4个个32位的外部中断线路配置寄存器,高位的外部中断线路配置寄存器,高16位保留,低位保留,低16位用来定义外部中断线路。位用来定义外部中断线路。nEXTICR:外部中断线路外部中断线路0-15配置寄存器有配置寄存器有4个个32位的位的EXTICR:外部中断线路外部中断线路0-15配置寄存器配置寄存器nEXTIx3:0:EXTIx配置配置(x=0 3)(EXTIx configuration)n这些位可由软件读写,用于选择这些位可由软件读写,用于选择EXTIx外部中断的输入源。外部中断的输入源。n0000:PAx引脚引脚n0001:PBx引脚引脚n0010:PCx引脚引脚n0011:PDx引脚引脚 n0100:PEx引脚引脚n0101:PFx引脚引脚n0110:PGx引脚引脚nEXTICR:外部中断线路外部中断线路0-15配置寄存器配置寄存器EXTIx3配置中断线路函数配置中断线路函数GPIO_EXTILineConfig n功能描述:选择功能描述:选择GPIO管脚用作外部中断线路管脚用作外部中断线路n函数原形:函数原形:void GPIO_EXTILineConfig(u8 GPIO_PortSource,u8 GPIO_PinSource)n输入参数输入参数1:GPIO_PortSource-选择用作外部中断线源的选择用作外部中断线源的GPIO端口端口n输入参数输入参数2:GPIO_PinSource-待设置的外部中断线路待设置的外部中断线路n例:例:/*Selects PB.8 as EXTI Line 8*/GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);n配置中断线路函数配置中断线路函数GPIO_EXTILineConfig 功能功能外部中断的触发方式外部中断的触发方式n上升沿、下降沿、上升沿上升沿、下降沿、上升沿/下降沿下降沿nEXTI_Trigger_Falling:设置输入线路下降沿为中断请求设置输入线路下降沿为中断请求 nEXTI_Trigger_Rising:设置输入线路上升沿为中断请求设置输入线路上升沿为中断请求 nEXTI_Trigger_Rising_Falling:设置输入线路双边触发中断请求设置输入线路双边触发中断请求 nEXTI_Mode_Event:设置:设置EXTI线路为事件线路为事件nEXTI_Mode_Interrupt:设置:设置EXTI线路为中断请求线路为中断请求nEXTI_LineCmd:用来定义选中线路的新状态。它可以被设为:用来定义选中线路的新状态。它可以被设为ENABLE或者或者DISABLE。n外部中断的触发方式上升沿、下降沿、上升沿外部中断的触发方式上升沿、下降沿、上升沿/下降沿下降沿中断初始化函数中断初始化函数EXTI_Init例:例:/*Enables external lines 12 and 14 interrupt generation on falling edge*/EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line12|EXTI_Line14;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);返回返回n中断初始化函数中断初始化函数EXTI_Init例:例:/*Enables e4.3 4.3 中断优先级中断优先级n中断优先级分组:中断优先级分组:STM32有有5种优先级管理方式,在一个种优先级管理方式,在一个系统中,选用其中一种。系统中,选用其中一种。n通过设置通过设置32位寄存器位寄存器AIRC的的10:8位,指定组别。位,指定组别。n优先级分组:优先级分组:n第第0组:组:16个从优先级个从优先级n第第1组:组:2个抢占优先级,个抢占优先级,8个从优先级个从优先级n第第2组:组:4个抢占优先级,个抢占优先级,4个从优先级个从优先级n第第3组:组:8个抢占优先级,个抢占优先级,2个从优先级个从优先级n第第4组:组:16个抢占优先级个抢占优先级n4.3 中断优先级中断优先级分组:中断优先级中断优先级分组:STM32有有5种优先级管理种优先级管理优先级控制说明优先级控制说明n具有较高抢占优先级的中断(数字小的)可以实现中断具有较高抢占优先级的中断(数字小的)可以实现中断嵌套。从优先级不管高低,只能排队。嵌套。从优先级不管高低,只能排队。n在抢占优先级相同时,先响应从优先级高的中断。在抢占优先级相同时,先响应从优先级高的中断。n抢占优先级和从优先级都相同时,根据它们在中断表中抢占优先级和从优先级都相同时,根据它们在中断表中的排位顺序决定,序号小的先被处理。的排位顺序决定,序号小的先被处理。例:例:/*Configure the Priority Grouping with 1 bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);n优先级控制说明具有较高抢占优先级的中断(数字小的)可以实现中优先级控制说明具有较高抢占优先级的中断(数字小的)可以实现中4.4 STM324.4 STM32中断寄存器中断寄存器nEXTI_IMR:中断屏蔽寄存器中断屏蔽寄存器 0:屏蔽来自线:屏蔽来自线x上的中断请求;上的中断请求;1:开放来自线:开放来自线x上的中断请求。上的中断请求。nEXTI_EMR:事件屏蔽寄存器:事件屏蔽寄存器 0:屏蔽来自线:屏蔽来自线x上的事件请求;上的事件请求;1:开放来自线:开放来自线x上的事件请求。上的事件请求。nEXTI_RTSR:上升沿触发选择寄存器上升沿触发选择寄存器 1:允许输入线:允许输入线x上的上升沿触发上的上升沿触发(中断和事件中断和事件);0:禁止。:禁止。nEXTI_FTSR:下降沿触发选择寄存器下降沿触发选择寄存器 1:允许输入线:允许输入线x上的下降沿触发上的下降沿触发(中断和事件中断和事件);0:禁止。:禁止。nEXTI_SWIER:软件中断事件寄存器:软件中断事件寄存器 当当某某位为位为0时,写时,写1将设置将设置EXTI_PR中相应的挂起位。如果在中相应的挂起位。如果在EXTI_IMR和和EXTI_EMR中允许产生该中断,则此时将产生一个中断。中允许产生该中断,则此时将产生一个中断。注:通过清除注:通过清除EXTI_PR的对应位的对应位(写入写入1),可以清除该位为,可以清除该位为0。nEXTI_PR:挂起寄存器挂起寄存器 当在外部中断线上发生了选择的边沿事件,该位被置当在外部中断线上发生了选择的边沿事件,该位被置1。在该位中。在该位中写入写入1可以清除它,也可以通过改变边沿检测的极性清除。可以清除它,也可以通过改变边沿检测的极性清除。n4.4 STM32中断寄存器中断寄存器EXTI_IMR:中断屏蔽寄存器:中断屏蔽寄存器返回返回n返回返回EXTI库函数库函数nEXTI_DeInit:将外设将外设EXTI寄存器重设为缺省值寄存器重设为缺省值nEXTI_Init:根据根据EXTI_InitStruct中指定的参数初始化外设中指定的参数初始化外设EXTI寄存寄存器。器。nEXTI_StructInit:把把EXTI_InitStruct中的每一个参数按缺省值填入。中的每一个参数按缺省值填入。nEXTI_GenerateSWInterrupt:产生一个软件中断。:产生一个软件中断。nEXTI_GetFlagStatus:检查指定的:检查指定的EXTI线路标志位设置与否。线路标志位设置与否。nEXTI_ClearFlag:清除:清除EXTI线路挂起标志位。线路挂起标志位。nEXTI_GetITStatus:检查指定的检查指定的EXTI线路触发请求发生与否。线路触发请求发生与否。nEXTI_ClearITPendingBit:清除清除EXTI线路挂起位线路挂起位nEXTI库函数库函数EXTI_DeInit:将外设将外设EXTI寄存器寄存器函数EXTI_Init n功能描述:功能描述:根据根据EXTI_InitStruct中指定的参数初始化外设中指定的参数初始化外设EXTI寄存器。寄存器。n函数原形:函数原形:void EXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct)n输入参数:输入参数:EXTI_InitStruct-指向结构指向结构EXTI_InitTypeDef的指针。的指针。n函数函数EXTI_Init 功能描述:功能描述:根据根据EXTI_InitSnEXTI_InitTypeDef定义于文件定义于文件“stm32f10 x_exti.h”:typedef struct u32 EXTI_Line;EXTIMode_TypeDef EXTI_Mode;EXTIrigger_TypeDef EXTI_Trigger;FunctionalState EXTI_LineCmd;EXTI_InitTypeDef;nEXTI_InitTypeDef定义于文件定义于文件“stm32f10nEXTI_Line:EXTI_Line0-EXTI_Line18,其中之一。,其中之一。nEXTI_Mode:EXTI_Mode_Event 或者或者 EXTI_Mode_Interrupt nEXTI_Trigger:EXTI_Trigger_Falling 或者或者 EXTI_Trigger_Rising 或者或者 EXTI_Trigger_Rising_Falling nEXTI_LineCmd:ENABLE或者或者DISABLEnEXTI_Line:EXTI_Line0-EXTIn例:例:/*Enables external lines 12 and 14 interrupt generation on falling edge*/EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line12|EXTI_Line14;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);n例:例:/*Enables external lines 1函数EXTI_GetFlagStatus n功能描述:检查指定的功能描述:检查指定的EXTI线路标志位设置与否线路标志位设置与否n函数原形:函数原形:FlagStatus EXTI_GetFlagStatus(u32 EXTI_Line)n输入参数:输入参数:EXTI_Line-待检查的待检查的EXTI线路标志位。线路标志位。n返回值:返回值:EXTI_Line的新状态(的新状态(SET或者或者RESET)例:例:/*Get the status of EXTI line 8*/FlagStatus EXTIStatus;EXTIStatus=EXTI_GetFlagStatus(EXTI_Line8);n函数函数EXTI_GetFlagStatus 功能描述:检查指定功能描述:检查指定固态函数库的编码规则n布尔型布尔型typedef enum FALSE=0,TRUE=!FALSE bool;n标志位状态类型标志位状态类型typedef enum RESET=0,SET=!RESET FlagStatus;n固态函数库的编码规则布尔型标志位状态类型固态函数库的编码规则布尔型标志位状态类型n错误状态类型错误状态类型typedef enum ERROR=0,SUCCESS=!ERROR ErrorStatus;n功能状态类型功能状态类型 typedef enum DISABLE=0,ENABLE=!DISABLE FunctionalState;n错误状态类型功能状态类型错误状态类型功能状态类型固态函数库定义了固态函数库定义了24个变量类型,它们的类型和大小是固定的。个变量类型,它们的类型和大小是固定的。ntypedef signed long s32;ntypedef signed short s16;ntypedef signed char s8;ntypedef signed long const sc32;/*Read Only*/ntypedef signed short const sc16;/*Read Only*/ntypedef signed char const sc8;/*Read Only*/ntypedef volatile signed long vs32;ntypedef volatile signed short vs16;ntypedef volatile signed char vs8;ntypedef volatile signed long const vsc32;/*Read Only*/ntypedef volatile signed short const vsc16;/*Read Only*/ntypedef volatile signed char const vsc8;/*Read Only*/n固态函数库定义了固态函数库定义了24个变量类型,它们的类型和大小是固定的。个变量类型,它们的类型和大小是固定的。tntypedef unsigned long u32;ntypedef unsigned short u16;ntypedef unsigned char u8;ntypedef unsigned long const uc32;/*Read Only*/ntypedef unsigned short const uc16;/*Read Only*/ntypedef unsigned char const uc8;/*Read Only*/ntypedef volatile unsigned long vu32;ntypedef volatile unsigned short vu16;ntypedef volatile unsigned char vu8;ntypedef volatile unsigned long const vuc32;/*Read Only*/ntypedef volatile unsigned short const vuc16;/*Read Only*/ntypedef volatile unsigned char const vuc8;/*Read Only*/ntypedef unsigned long u32;函数EXTI_ClearFlag n功能描述:清除功能描述:清除EXTI线路挂起标志位。线路挂起标志位。n函数原形:函数原形:void EXTI_ClearFlag(u32 EXTI_Line)n输入参数输入参数:EXTI_Line-待清除标志位的待清除标志位的EXTI线路线路例:例:/*Clear the EXTI line 2 pending flag*/EXTI_ClearFlag(EXTI_Line2);n函数函数EXTI_ClearFlag 功能描述:清除功能描述:清除EXTI线路线路函数EXTI_GetITStatus n功能描述:检查指定的功能描述:检查指定的EXTI线路触发请求发生与否。线路触发请求发生与否。(检查中断请求(检查中断请求&中断允许控制位)中断允许控制位)n函数原形:函数原形:ITStatus EXTI_GetITStatus(u32 EXTI_Line)n返回值:返回值:EXTI_Line的新状态(的新状态(SET或者或者RESET)例:例:/*Get the status of EXTI line 8*/ITStatus EXTIStatus;EXTIStatus=EXTI_GetITStatus(EXTI_Line8);n函数函数EXTI_GetITStatus 功能描述:检查指定的功能描述:检查指定的E函数EXTI_ClearITPendingBit n功能描述:清除功能描述:清除EXTI线路挂起位线路挂起位n函数原形:函数原形:void EXTI_ClearITPendingBit(u32 EXTI_Line)例:例:/*Clears the EXTI line 2 interrupt pending bit*/EXTI_ClearITpendingBit(EXTI_Line2);n函数函数EXTI_ClearITPendingBit 功能描述:功能描述:NVIC库函数nNVIC_DeInit:将外设:将外设NVIC寄存器重设为缺省值寄存器重设为缺省值nNVIC_PriorityGroupConfig:设置优先级分组设置优先级分组nNVIC_Init:根据:根据NVIC_InitStruct中指定的参数初始化中指定的参数初始化外设外设NVIC寄存器。寄存器。nNVIC_SetVectorTable:设置向量表的位置和偏移:设置向量表的位置和偏移 nNVIC库函数库函数NVIC_DeInit:将外设:将外设NVIC寄存器寄存器函数函数NVIC_PriorityGroupConfign功能:用来设置优先级分组(先占优先级和从优先级)功能:用来设置优先级分组(先占优先级和从优先级)n函数原形:函数原形:void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)例:例:/*Configure the Priority Grouping with 1 bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);n函数函数NVIC_PriorityGroupConfig功能:用功能:用 NVIC_PriorityGroup 描述描述n NVIC_PriorityGroup 函数函数 NVIC_Init n功能描述:根据功能描述:根据NVIC_InitStruct中指定的参数初始化外中指定的参数初始化外设设NVIC寄存器。寄存器。n函数原形:函数原形:void NVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)n输入参数:输入参数:NVIC_InitStruct-指向结构指向结构NVIC_InitTypeDef的指针。的指针。n函数函数 NVIC_Init 功能描述:根据功能描述:根据NVIC_InitSNVIC_InitTypeDef structure nNVIC_InitTypeDef定义于文件定义于文件“stm32f10 x_nvic.h”:typedef struct u8 NVIC_IRQChannel;u8 NVIC_IRQChannelPreemptionPriority;u8 NVIC_IRQChannelSubPriority;FunctionalState NVIC_IRQChannelCmd;NVIC_InitTypeDef;nNVIC_IRQChannelCmd:指定了在成员:指定了在成员NVIC_IRQChannel中中定义的定义的IRQ通道被使能还是失能通道被使能还是失能nNVIC_InitTypeDef structure NVINVIC_IRQChannel值nEXTI0_IRQChannel:外部中断线外部中断线0中断中断nEXTI1_IRQChannel:外部中断线外部中断线1中断中断nEXTI2_IRQChannel:外部中断线外部中断线2中断中断nEXTI3_IRQChannel:外部中断线外部中断线3中断中断nEXTI4_IRQChannel:外部中断线外部中断线4中断中断nEXTI9_5_IRQChannel:外部中断线外部中断线9-5中断中断nEXTI15_10_IRQChannel:外部中断线外部中断线15-10中断中断nTIM2_IRQChannel:TIM2全局中断全局中断nTIM3_IRQChannel:TIM3全局中断全局中断nTIM4_IRQChannel:TIM4全局中断全局中断nnnNVIC_IRQChannel值值EXTI0_IRQChann例:例:NVIC_InitTypeDef NVIC_InitStructure;/*Configure the Priority Grouping with 1 bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*Enable TIM3 global interrupt with Preemption Priority 0 and Sub Priority as 2*/NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure(&NVIC_InitStructure);/Enable EXTI4 interrupt with Preemption Priority 1 and Sub Priority as 7 NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=7;NVIC_InitStructure(&NVIC_InitStructure);n例:例:函数NVIC_StructInit n功能描述:把功能描述:把NVIC_InitStruct中的每一个参数按缺省中的每一个参数按缺省值填入。值填入。成员成员 缺省值缺省值 NVIC_IRQChannel 0 x0 NVIC_IRQChannelPreemptionPriority 0 NVIC_IRQChannelSubPriority 0 NVIC_IRQChannelCmd DISABLE例:例:NVIC_InitTypeDef NVIC_InitStructure;NVIC_StructInit(&NVIC_InitStructure);返回返回n函数函数NVIC_StructInit 功能描述:把功能描述:把NVIC_I4.6 4.6 中断编程举例中断编程举例n定义变量定义变量n声明函数声明函数n主程序主程序n配置时钟配置时钟n配置中断优先级配置中断优先级n配置配置GPIOn配置配置EXTIn主循环主循环n4个个LED循环点亮循环点亮n中断服务函数中断服务函数n1,2灯和灯和3,4灯交替点亮灯交替点亮5次次n4.6 中断编程举例定义变量中断编程举例定义变量#include stm32f10 x_lib.h ErrorStatus HSEStartUpStatus;extern vu32 TimingDelay;u8 ReadValue1,ReadValue2,ReadValue3,ReadValue4;void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void EXTI_Configuration(void);extern void Delay(vu32 nTime);n#include stm32f10 x_lib.h int main()RCC_Configuration();/*配置系统时钟配置系统时钟*/NVIC_Configuration();/*配置中断优先级配置中断优先级*/GPIO_Configuration();/*IO口初始化口初始化*/EXTI_Configuration();/*配置外部中断配置外部中断*/while(1)GPIOC-ODR=0 xfffffffe;/*PC0=0-点亮点亮D2*/Delay(8000000);GPIOC-ODR=0 xfffffffd;/*PC1=0-点亮点亮D3*/Delay(8000000);GPIOC-ODR=0 xfffffffb;/*PC2=0-点亮点亮D4*/Delay(8000000);GPIOC-ODR=0 xfffffff7;/*PC3=0-点亮点亮D5*/Delay(8000000);nint main()void RCC_Configuration()/系统时钟配置,略。系统时钟配置,略。/使能外设时钟使能外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);void Delay(vu32 nCount)/*延时延时*/for(;nCount!=0;nCount-);nvoid RCC_Configuration()void EXTI_Configuration()GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line3;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);nvoid EXTI_Configuration()void NVIC_Configuration()NVIC_InitTypeDef NVIC_InitStructure;/*Set the Vector Table base location at 0 x20000000*/设置向量表的位置和偏移#ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0 x0);#else /*VECT_TAB_FLASH Set the Vector Table base location at 0 x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0);#endif /*Configure one bit for preemption priority*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);nvoid NVIC_Configuration()void GPIO_Configuration()/*IO口初始化口初始化*/GPIO_InitTypeDef GPIO_InitStructure;/*PA0PA3口配置为输入口配置为输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);/*PC0PC3口配置为输出口配置为输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);nvoid GPIO_Configuration()/中断服务程序中断服务程序void EXTI3_IRQHandler(void)int i=0;if(EXTI_GetITStatus(EXTI_Line3)!=RESET)EXTI_ClearITPendingBit(EXTI_Line3);for(i=0;iODR=0 xfffffff0;Delay(0 x400000);GPIOC-ODR=0 xffffffff;Delay(0 x400000);返回返回n中断服务程序中断服务程序void EXTI3_IRQHandler(vo练习题四练习题四1.1.中断是指()中断是指()2.2.中断系统包括()、()、()。中断系统包括()、()、()。3.3.STM32STM32有()个中断源,其中()个异常,()中断。有()个中断源,其中()个异常,()中断。4.4.外部中断外部中断EXTIEXTI有()个。有()个。5.5.GPIOGPIO引脚都可以作为中断输入端,映射到内部()中断通道。引脚都可以作为中断输入端,映射到内部()中断通道。6.6.EXIT0EXIT0对应的对应的GPIOGPIO引脚是()、()、()、()、()。引脚是()、()、()、()、()。7.7.中断请求的触发方式有()、()、()。中断请求的触发方式有()、()、()。8.8.STM32STM32中断优先级包括()优先级和()优先级。只有()优先中断优先级包括()优先级和()优先级。只有()优先级高,才可以实现中断嵌套。级高,才可以实现中断嵌套。9.9.中断嵌套是指()。中断嵌套是指()。10.10.STM32STM32有()组优先级控制方式,一个系统中只能选用其中一组。有()组优先级控制方式,一个系统中只能选用其中一组。11.11.当抢占优先级和副优先级都相同时,按照()决定响应顺序。当抢占优先级和副优先级都相同时,按照()决定响应顺序。12.12.中断服务程序全部保存在中断服务程序全部保存在stm32f10 x_it.cstm32f10 x_it.c文件中,中断服务程序文件中,中断服务程序(子函数)名为(子函数)名为(),函数是空的,可在其中编写代码。中断),函数是空的,可在其中编写代码。中断服务函数也可以放在服务函数也可以放在main.cmain.c中。中。n练习题四中断是指()练习题四中断是指()13.GPIOA.0作为中断请求输入端,下降沿触发。完成下作为中断请求输入端,下降沿触发。完成下列中断初始化配置程序。列中断初始化配置程序。void EXTI_Configuration()GPIO_EXTILineConfig(()(),()());EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=()();EXTI_InitStructure.EXTI_Mode=()();EXTI_InitStructure.EXTI_Trigger=()();EXTI_InitStructure.EXTI_LineCmd=()();EXTI_Init(&EXTI_InitStructure);n13.GPIOA.0作为中断请求输入端,下降沿触发。完成下作为中断请求输入端,下降沿触发。完成下14.设置设置GPIOA.0和和GPIOA.1上拉输入。上拉输入。void GPIO_Configuration()GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=();GPIO_InitStructure.GPIO_Mode=();GPIO_Init(GPIOA,&GPIO_InitStructure);n14.设置设置GPIOA.0和和GPIOA.1上拉输入。上拉输入。15.配置外部中断配置外部中断EXIT0抢占优先级为抢占优先级为2级,副优先级为级,副优先级为3级。级。void NVIC_Configuration()NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_());NVIC_InitStructure.NVIC_IRQChannel=EXTI()()_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=()();NVIC_InitStructure.NVIC_IRQChannelSubPriority=();NVIC_InitStructure.NVIC_IRQChannelCmd=();NVIC_Init(&NVIC_InitStructure);返回返回n15.配置外部中断配置外部中断EXIT0抢占优先级为抢占优先级为2级,副优先级为级,副优先级为3
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!