




免费预览已结束,剩余78页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STM32的中断控制系统,2012年10月21日,本章提要,1,3,2,4,嵌套向量中断控制器,外部中断/事件硬件结构,外部中断/事件寄存器,外部中断/事件库函数,5,嵌套向量中断控制器库函数,6,STM32中断控制实例,嵌套向量中断控制器,嵌套向量中断控制器(NVIC),中断服务程序,中断优先级,便于进行低延迟的异常和中断处理控制电源管理执行系统控制寄存器,NVIC结构图,异常可分为系统异常和外部中断。,CortexM3包括16个系统异常,240个外部中断STM32包括16个Cortex-M3系统异常,43个可编程中断通道有意义的外部中断数有厂商决定,编号即为默认的中断号对应向量表中的中断函数通过基址+偏移地址联系,STM32向量表,11个Cortex-M3系统异常43个可编程中断通道stm32f10 x_vector.c向量表,NVIC的优先级概念占先式优先级(pre-emptionpriority)高占先式优先级的中断事件可以打断当前的主程序/中断程序的运行抢断式优先响应,俗称中断嵌套。子优先级(subpriority)在占先式优先级相同的情况下,高子优先级的中断优先被响应;在占先式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被响应的低子优先级中断执行结束后才能得到响应非抢断式响应(不能嵌套)。判断中断是否会被响应的依据首先是占先式优先级,其次是子优先级;占先式优先级决定是否会有中断嵌套;Reset、NMI、HardFault的优先级为负(高于普通中断优先级)且不可修改。,中断优先级控制位组合,STM32中指定中断优先级的寄存器位有4位这4个寄存器位的分组方式如下:第0组:所有4位用于指定响应优先级第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级,本章提要,1,3,2,4,嵌套向量中断控制器,外部中断/事件硬件结构,外部中断/事件寄存器,外部中断/事件库函数,5,嵌套向量中断控制器库函数,6,STM32中断控制实例,外部中断/事件硬件结构(EXTI),EXTI控制器的主要特性每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时钟宽度的外部信号。,外部中断/事件控制器框图,外部中断/事件线路映像,另外四个EXTI线的连接方式如下:EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USB唤醒事件EXTI线19连接到以太网唤醒事件(只适用于互联型产品),本章提要,1,3,2,4,嵌套向量中断控制器,外部中断/事件硬件结构,外部中断/事件寄存器,外部中断/事件库函数,5,嵌套向量中断控制器库函数,6,STM32中断控制实例,外部中断/事件寄存器,EXTI寄存器描述,中断屏蔽寄存器(EXTI_IMR),事件屏蔽寄存器(EXTI_EMR),上升沿触发选择寄存器(EXTI_RTSR),下降沿触发选择寄存器(EXTI_FTSR),注意:外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。在写上升沿和下降沿寄存器时,在外部中断线上的下降沿信号不能被识别,挂起位不会被置位。在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。,软件中断事件寄存器(EXTI_SWIER),挂起寄存器(EXTI_PR),本章提要,1,3,2,4,嵌套向量中断控制器,外部中断/事件硬件结构,外部中断/事件寄存器,外部中断/事件库函数,5,嵌套向量中断控制器库函数,6,STM32中断控制实例,外部中断/事件库函数,函数EXTI_DeInit,函数EXTI_Init,EXTI_Line值,EXTI_Mode设置了被使能线路的模式,1、EXTI_Mode值,2、EXTI_Trigger值,例如具体的配置初始化方式,EXTI_InitTypeDefEXTI_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_StructInit,EXTI_InitStruct缺省值,函数EXTI_GenerateSWInterrupt,产生EXTI_6的中断信息EXTI_GenerateSWInterrupt(EXTI_Line6);,函数EXTI_GetFlagStatus,FlagStatusEXTIStatus;EXTIStatus=EXTI_GetFlagStatus(EXTI_Line8);,函数EXTI_ClearFlag,/*清除EXTI3的挂起标志位*/EXTI_ClearFlag(EXTI_Line3);,函数EXTI_GetITStatus,/*检查EXTI8的触发状态*/ITStatusEXTIStatus;EXTIStatus=EXTI_GetITStatus(EXTI_Line8);,函数EXTI_ClearITPendingBit,/*清除EXTI2的挂起位*/EXTI_ClearITpendingBit(EXTI_Line2);,本章提要,1,3,2,4,嵌套向量中断控制器,外部中断/事件硬件结构,外部中断/事件寄存器,外部中断/事件库函数,5,嵌套向量中断控制器库函数,6,STM32中断控制实例,嵌套向量中断控制器库函数,NVIC驱动有多种用途:使能或者失能IRQ中断,使能或者失能单独的IRQ通道,改变IRQ通道的优先级。,函数NVIC_PriorityGroupConfig,/*ConfigurethePriorityGroupingwith1bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);,函数NVIC_Init,/*配置一位的优先级组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*使能USART1全局优先级1和从优先为5*/NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=5;NVIC_InitStructure(,函数NVIC_Init,NVIC_IRQChannel值,注意:将所有的Channel改为n,NVIC_IRQChannel值续,注意:将所有的Channel改为n,例:/*使能EXTI8全局中断优先为1次优先为2*/NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;NVIC_InitStructure(,函数NVIC_StructInit,NVIC_StructInit(,函数NVIC_SetVectorTable,NVIC_VectTab值,/*设置在FLASH的向量表地址为0 x0*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0);,NVIC_InitTypeDefNVIC_InitStructure;/*设置向量表基地址为0 x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0000);/*配置优先级组2bits*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/*使能EXTI中断*/NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(,函数GPIO_EXTILineConfig,函数GPIO_EventOutputConfig,/*SelectstheGPIOEpin5forEVENToutput*/GPIO_EventOutputConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);,函数GPIO_EventOutputCmd,/*EnableEventOuputtotheGPIOCpin6*/GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);GPIO_EventOutputCmd(ENABLE),GPIO端口资源值,GPIO管脚资源值,/*设置B口的8管脚为8号中断线*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8);,本章提要,1,3,2,4,嵌套向量中断控制器,外部中断/事件硬件结构,外部中断/事件寄存器,外部中断/事件库函数,5,嵌套向量中断控制器库函数,6,STM32中断控制实例,STM32中断控制实例,STM32中断实现步骤:时钟初始化管脚初始化NVIC初始化EXTI初始化执行程序中断程序,例:如图所示,实现按键控制下的LED的亮灭,用中断方式进行控制,时钟初始化,voidRCC_Configuration(void)/*EnableKeyButtonGPIOPort,GPIO_LEDandAFIOclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);,按键和LED初始化,voidGPIO_Configuration(void)GPIO_InitTypeDefGPIO_InitStructure;/*ConfigureGPIOLedpin1asOutputpush-pull*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,NVIC初始化,voidNVIC_Configuration(void)NVIC_InitTypeDefNVIC_InitStructure;NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0);/*Configureonebitforpreemptionpriority*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*EnabletheEXTI1Interrupt*/NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(,中断初始化,voidEXTI_Configuration(void)GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource1);/*ConfigureKeyButtonEXTILinetogenerateaninterruptonfallingedge*/EXTI_InitTypeDefEXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line1;/使用1号中断通道EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;/中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;/下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(/软件模拟一次中断,主函数,#includestm32f10 x.hvoidmain(void)RCC_Configuration();/时钟初始化NVIC_Configuration();/嵌套向量中断控制初始化GPIO_Configuration();/按键和LED初始化EXTI_Configuration();/中断初始化GPIO_SetBits(GPIOA,GPIO_Pin_1);while(1),中断子函数,#includestm32f10 x_it.hvoidEXTI1_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line1)!=RESET)/*取反LED1*/GPIO_WriteBit(GPIOA,GPIO_Pin_1,(!GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1);/*CleartheKeyButtonEXTIlinependingbit*/EXTI_ClearITPendingBit(EXTI_Line1);,例:如图所示,用中断方式实现下图中LED一亮一灭,时钟初始化,voidRCC_Configuration(void)/*EnableKeyButtonGPIOPort,GPIO_LEDandAFIOclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);,按键和LED初始化,voidGPIO_Configuration(void)GPIO_InitTypeDefGPIO_InitStructure;/*ConfigureGPIOLedpin1asOutputpush-pull*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,NVIC初始化,voidNVIC_Configuration(void)NVIC_InitTypeDefNVIC_InitStructure;NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0);/*Configureonebitforpreemptionpriority*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*EnabletheEXTI1Interrupt*/NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(,中断初始化,voidEXTI_Configuration(void)GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);/*ConfigureKeyButtonEXTILinetogenerateaninterruptonfallingedge*/EXTI_InitStructure.EXTI_Line=EXTI_Line1;/使用1号中断通道EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;/中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;/下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(/软件模拟一次中断,主函数,voidmain(void)RCC_Configuration();/时钟初始化NVIC_Configuration();/嵌套向量中断控制初始化GPIO_Configuration();/按键和LED初始化EXTI_Configuration();/中断初始化GPIOSetBits(GPIOA,GPIO_Pin_4);GPIOResetBits(GPIOA,GPIO_Pin_5);while(1),中断子函数,#includestm32f10 x_it.hvoidEXTI1_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line1)!=RESET)/*取反LED1*/GPIO_WriteBit(GPIOA,GPIO_Pin_4,(!GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_4);GPIO_WriteBit(GPIOA,GPIO_Pin_5,(!GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5);/*CleartheKeyButtonEXTIlinependingbit*/EXTI_ClearITPendingBit(EXTI_Line1);,例:用中断方式实现下图中各自按键控制一个LED的亮灭程序,时钟初始化,voidRCC_Configuration(void)/*EnableKeyButtonGPIOPort,GPIO_LEDandAFIOclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);,按键和LED初始化,voidGPIO_Configuration(void)/*初始化按键PC3和LED的PA5*/GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,NVIC初始化,voidNVIC_Configuration(void)NVIC_InitTypeDefNVIC_InitStructure;NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0);/*Configureonebitforpreemptionpriority*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*EnabletheEXTI2Interrupt,按键PD2*/NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(,初始化中断,voidEXTI_Configuration(void)/*按键PD2的中断配置*/GPIO_EXTILineConfig(GP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经审技能知识练习试卷附答案
- 2025年无人机电力巡检笔试高频考点
- 深圳理财知识培训课件
- 2025年一级建造师考试建筑工程管理与实务建筑工程施工组织设计专项试卷
- 办公室文档管理规范模板文档分类与归档版
- 读书写作培训课件
- 售后服务问题反馈解决模板高效处理流程版
- 青田县砂石料有限公司船寮镇矿地综合开发利用土地废弃资源利 用配套加工项目环评报告
- 电销培训课件模板
- 2025年度特种车辆借用与运行数据安全保护服务合同
- 水泥路施工安全知识培训课件
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- 2025年金融消费者权益保护考试题与答案
- 中学2025年秋季第一学期开学工作方案
- 《跨越百年的美丽》课件 中职语文上册
- GB 11122-2025柴油机油
- 2025年河南开封产城融合投资集团有限公司招聘考试笔试试题(含答案)
- 大便常规检查
评论
0/150
提交评论