STM32单片机技术与应用项目教程 课件 项目四 中断线方式LED状态控制设计_第1页
STM32单片机技术与应用项目教程 课件 项目四 中断线方式LED状态控制设计_第2页
STM32单片机技术与应用项目教程 课件 项目四 中断线方式LED状态控制设计_第3页
STM32单片机技术与应用项目教程 课件 项目四 中断线方式LED状态控制设计_第4页
STM32单片机技术与应用项目教程 课件 项目四 中断线方式LED状态控制设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

项目4

中断线方式LED状态控制设计【知识目标】掌握STM32F407ZGT6单片机的中断结构和中断优先级结构;掌握CMSIS中断向量定义、中断响应函数的定义;掌握STM32F407ZGT6单片机外部中断线的结构功能;了解标准库文件中断函数功能。【能力目标】掌握中断向量的优先级分组和中断向量的优先级配置;掌握中断向量程序的设计过程与设计规范。使用标准库函数配置外部中断线功能。【素质目标】培养规范化程序设计习惯;培养分析问题解决问题的能力;培养阅读设计文档资料的能力。项目4中断线方式LED状态控制设计任务4.1STM32F407ZGT6中断向量与优先级任务4.2STM32F407ZGT6单片机的外部中断任务4.3基于外部中断线的按键功能设计任务4.1认识STM32F407ZGT6中断向量与优先级1.STM32单片机中断介绍2.STM32单片机的中断管理3.STM32单片机的NVIC寄存器

while(1){delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }1.STM32单片机中断介绍

while(1){delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }1.STM32单片机中断介绍

while(1){delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }1.STM32单片机中断介绍

while(1){delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }1.STM32单片机中断介绍

while(1){delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }1.STM32单片机中断介绍

while(1){delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }1.STM32单片机中断介绍

while(1)//主程序任务{delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }

****_Handler

//中断任务{

irq();

}1.STM32单片机中断介绍

while(1)//主程序任务{delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }

****_Handler

//中断任务{

irq();

}1.STM32单片机中断介绍

while(1)//主程序任务{delay_ms(10);WK_UP_Scan_Treate_Function(); KEY1_Scan_Treate_Function();KEY2_Scan_Treate_Function();KEY3_Scan_Treate_Function(); }

****_Handler

//中断任务{

irq();

}1.STM32单片机中断介绍1.STM32单片机中断介绍程序①指令n指令n+1程序①中断源中断请求中断服务程序(程序②)中断技术解决快速处理器与慢速外围元器件之间的矛盾,实现快速处理器与慢速外围元器件的并行工作;根据设计任务程序的响应等级而灵活规划设计任务;单片机响应中断的流程:(1)外设向处理器发出中断处理请求,处理器确认收到的中断请求;(2)处理器暂停当前执行的任务,保存当前正在执行任务的现场参数,将参数堆栈,保存正在执行的任务的程序位置;(3)处理器执行外设的中断服务程序;(4)处理器恢复原来暂停执行的任务,从堆栈区域出栈恢复保存的参数值,继续执行之前暂停的任务;Cortex-M4中断支持256个中断,包含16个内核中断与240个外部(相对于内核)可屏蔽中断;具有可编程的256级中断优先级的设置。内核中断:不能被打断,不能设置优先级(即优先级凌驾于外部中断只上)。

常见的内核中断有:复位(Reset)、不可屏蔽中断(NMI)、硬错误(HardFault)等。STM32F407ZGT6中断仅支持92个中断,包含10个内核中断与82个外部(相对于内核)可屏蔽中断;具有可编程的16级中断优先级的设置。startup_stm32f40_41xxx.s中列出中断向量处理函数名称DCDReset_Handler;ResetHandlerDCDNMI_Handler;NMIHandlerDCDHardFault_Handler;HardFaultHandlerDCDMemManage_Handler;MPUFaultHandlerDCDBusFault_Handler;BusFaultHandlerDCDUsageFault_Handler;UsageFaultHandlerDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCDSVC_Handler;SVCallHandlerDCDDebugMon_Handler;DebugMonitorHandlerDCD0;ReservedDCDPendSV_Handler;PendSVHandlerDCDSysTick_Handler;SysTickHandler……DCDHASH_RNG_IRQHandler;HashandRngDCDFPU_IRQHandler;FPUstm32f4xx.h中对具体向量名称进行了定义typedefenumIRQn{/*******Cortex-M4ProcessorExceptionsNumbers******************************************/NonMaskableInt_IRQn=-14,/*!<2NonMaskableInterrupt*/MemoryManagement_IRQn=-12,/*!<4Cortex-M4MemoryManagementInterrupt*/BusFault_IRQn=-11,/*!<5Cortex-M4BusFaultInterrupt*/UsageFault_IRQn=-10,/*!<6Cortex-M4UsageFaultInterrupt*/SVCall_IRQn=-5,/*!<11Cortex-M4SVCallInterrupt*/DebugMonitor_IRQn=-4,/*!<12Cortex-M4DebugMonitorInterrupt*/PendSV_IRQn=-2,/*!<14Cortex-M4PendSVInterrupt*/SysTick_IRQn=-1,/*!<15Cortex-M4SystemTickInterrupt*//******STM32specificInterruptumbers*****************************************************/WWDG_IRQn=0,/*!<WindowWatchDogInterrupt*/……}IRQn_Type;常用的基本中断控制CMSIS-Core函数函数用法voidNVICEnableIRQ(IRQn_TypeIRQn)使能外部中断voidNVIC_DisableIRQ(IRQn_TypeIRQn)禁止外部中断voidNVIC_SetPriority(IRQn_TypeIRQn,uint32_tpriority)设置中断的优先级void__enable_irq(void)清除PRIMASK使能中断void__disable_irq(void)设置PRIMASK禁止所有中断voidNVIC_SetPriorityGrouping(uint32_tPriorityGroup)设置优先级分组配置2.STM32单片机的中断管理在使用任何一个中断之前需要:设置当前的单片机运行系统所需中断的优先级;使能外设中的可以触发中断的中断产生控制;使能NVIC中的中断;STM32F4的中断优先级设置STM32单片机的中断优先级可分为抢占优先级(PreemptionPriority)和响应优先级(SubPriority)两种,设定数字越小,优先级越高;

抢占优先级和响应优先级的设定共用4个比特位设置,如何选择抢占优先级、响应优先级的方案由编程者选择;(1)STM32F4的中断优先级分组设置举例:一个学校最多招收16个学员,如何平均的给学生分班?方案0:16个学生都在一个班级里,用4位二进制数表示学生的学号,学号范围0-15,班级的编号:无。同学之间的身份只有学号的不同,没有班级的不同。

每个同学代表了中断向量(用4位二进制数设置抢占优先级和响应优先级),班级代表了中断向量的抢占优先级,学号代表了响应优先级(1)STM32F4的中断优先级分组设置举例:一个学校最多招收16个学员,如何平均的给学生分班?方案1:16个学生分在两个班级里,用1位二进制数表示班级的编号,用3位二进制数表示学号的编号。学号范围0-7,班级的编号:0,1。

同学之间的身份既有有学号的不同,也有班级的不同,班级学号低的同学优先级高于班级号高班级学号高的同学。(1)STM32F4的中断优先级分组设置举例:一个学校最多招收16个学员,如何平均的给学生分班?方案2:16个学生分在四个班级里,用2位二进制数表示班级的编号,用2位二进制数表示学号的编号。学号范围0、1、2、3,班级的编号:0、1、2、3。

同学之间的身份既有有学号的不同,也有班级的不同,班级学号低的同学优先级高于班级号高班级学号高的同学。(1)STM32F4的中断优先级分组设置举例:一个学校最多招收16个学员,如何平均的给学生分班?方案3:16个学生分在八个班级里,用3位二进制数表示班级的编号,用一位二进制数表示学号的编号。学号范围0、1,班级的编号:0-7。

同学之间的身份既有有学号的不同,也有班级的不同,班级学号低的同学优先级高于班级号高班级学号高的同学。(1)STM32F4的中断优先级分组设置举例:一个学校最多招收16个学员,如何平均的给学生分班?方案4:16个学生分在十六个班级里,用4位二进制数表示班级的编号,学号范围:无,班级的编号:0-15。

同学之间的身份只有班级的不同,无学号身份。中断抢占优先级和响应优先级分组方式抢占优先级位数抢占优先级选择数抢占优先级可设置数值响应优先级选择位数响应优先级选择数响应优先级可设置数值方式001—4160-15方式1120-1380-7方式2240-3240-3方式3380-7120-1方式44160-1501—STM32F4的中断优先级设置STM32单片机的NVIC(嵌套向量中断控制器)寄存器地址寄存器CMSIS-Core符号功能0xE000E100~0xE000E11C中断设置使能寄存器NVIC->ISER[0]~NVIC->ISER[7]写1设置使能,写0无效,读取值表示当前使能状态,每个存器对应32个中断向量,ISER[0]对应中断0-31,ISER[1]对应中断32-63,……;0xE000E180~0xE000E19C中断清除使能寄存器NVIC->ICER[0]~NVIC->ICER[7]写1清除使能,写0无效,读取值表示当前使能状态,每个存器对应32个中断向量,ICER[0]对应中断0-31,ICER[1]对应中断32-63,……;0xE000E200~0xE000E21C中断设置挂起寄存器NVIC->ISPR[0]~NVIC->ISPR[7]写1设置挂起状态,写0无效,读取值表示当前状态,每个存器对应32个中断向量,ISPR[0]对应中断0-31,ISPR[1]对应中断32-63,……;0xE000E280~0xE000E29C中断清除挂起寄存器NVIC->ICPR[0]~NVIC->ICPR[7]写1清除挂起状态,写0无效,读取值表示当前状态,每个存器对应32个中断向量,ICPR[0]对应中断0-31,ICPR[1]对应中断32-63,……;0xE000E300~0xE000E31C中断活跃位寄存器NVIC->IABR[0]~NVIC->IABR[7]活跃状态位,当处理器执行中断响应程序时,对应的位为1,中断返回后对应位为0,IABR[0]对应中断0-31,IABR[1]对应中断32-63,……;0xE000E400~0xE000E4EF中断优先级寄存器NVIC->IP[0]~NVIC->IP[239]每个中断的中断优先级(8位宽度),STM32单片机仅使用高4位来设置抢占优先级和响应优先级,IP[0]与中断0对应,IP[1]与中断1对应,……;0xE000EF00软件触发中断寄存器NVIC->STIR写对应的中断编号值到该寄存器则相应编号的中断处于挂起状态任务4.2

了解STM32F407ZGT6单片机的外部中断1.STM32F407ZGT6单片机中断线结构2.STM32F407ZGT6单片机中断线寄存器STM32F4单片机的外部中断/事件控制器包含多达23个用于产生事件/中断请求的边沿检测器;外部的中断线共有23条中断线,EXTI16~EXTI22为专用中断线,EXTI0~EXTI15与各个端口相对应;1.STM32F407ZGT6单片机中断线结构1.STM32F407ZGT6单片机中断线结构EXTI0~EXTI15与各个端口相对应1.STM32F407ZGT6单片机中断线结构EXTI0~EXTI15与各个端口相对应1.STM32F407ZGT6单片机中断线结构EXTI0~EXTI15与各个端口相对应1.STM32F407ZGT6单片机中断线结构EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USBOTGFS唤醒事件

EXTI线19连接到以太网唤醒事件EXTI线20连接到USBOTGHS(在FS中配置)唤醒事件

EXTI线21连接到RTC入侵和时间戳事件EXTI线22连接到RTC唤醒事件中断线的功能:外部中断线的电平变化可以产生中断申请;可以设置为下降沿申请、上升沿申请、下降和上升沿都申请中断;可以设置外部的输入信号源,信号变化能够被处理器及时响应;2.STM32F4单片机中断线寄存器1)中断屏蔽寄存器(EXTI_IMR)设置为0则屏蔽中断,为1则启动中断,复位后屏蔽全部中断线2)事件屏蔽寄存器(EXTI_EMR)设置为0则屏蔽事件,为1则启动事件,复位后屏蔽全部事件2.STM32F4单片机中断线寄存器3)上升沿触发选择寄存器(EXTI_RTSR)

用于设置外部中断线是否选择上升沿触发中断申请,当被设置为1则对应的中断线上电平信号出现上升沿时触发中断申请2.STM32F4单片机中断线寄存器4)下降沿触发选择寄存器(EXTI_FTSR)

用于设置外部中断线是否选择下降沿触发中断申请,当被设置为1则对应的中断线上电平信号出现下降沿时触发中断申请2.STM32F4单片机中断线寄存器5)软件中断事件寄存器(EXTI_SWIER)

中断线触发位被置1后,如果在EXTI_IMR和EXTI_EMR中允许产生该中断,则产生中断请求。通过清除EXTI_PR寄存器中断线的对应位(写入“1”),可以将此寄存器对应的触发位清0。2.STM32F4单片机中断线寄存器6)中断挂起寄存器(EXTI_PR)

当在外部某个中断线上发生了选择边沿触发事件后,对应的中断线的中断挂起位被置“1”,如果中断没有被屏蔽则向处理器发出中断请求。对挂起位中写入“1”可以使挂起位清0,对挂起位写入0无效。2.STM32F4单片机中断线寄存器3.外部中断线的STD标准库接口函数

stm32f4xx_exti.cstm32f4xx_exti.h任务4.3

基于外部中断线的按键功能设计1.四个按键组成的外部中断线结构2.外部中断线程序设计任务4.3

基于外部中断线的按键功能设计【设计任务】以WK_UP、KEY1、KEY2、KEY3按键端口作为外部中断线的输入端口WK_UP每按下一次LED1的状态取反一次,KEY1每按下一次LED2的状态取反一次,KEY2每按下一次LED3的状态取反一次,KEY3每按下一次LED4的状态取反一次。1.四个按键组成的外部中断线结构WK_UP——PA0KEY3——PE2KEY2——PE3KEY1——PE42.外部中断线程序设计采用STD库函数进行外部中断线功能程序设计,主要包括如下步骤:1)调用misc.c库文件中的NVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)函数,设置当前运行环境下中断优先级的抢占优先级和响应优先级的工作方式。2)调用stm32f4xx_rcc.c库文件中的时钟设置函数RCC_AHB1PeriphClockCmd(uint32_tRCC_AHB1Periph,FunctionalStateNewState)开启中断线所在引脚的时钟,使用RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE)开启配置时钟功能。3)调用stm32f4xx_gpio.c库文件中的GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruc

温馨提示

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

评论

0/150

提交评论