第8章-STM32F10 x的主要模块设计3外部中断分析.ppt_第1页
第8章-STM32F10 x的主要模块设计3外部中断分析.ppt_第2页
第8章-STM32F10 x的主要模块设计3外部中断分析.ppt_第3页
第8章-STM32F10 x的主要模块设计3外部中断分析.ppt_第4页
第8章-STM32F10 x的主要模块设计3外部中断分析.ppt_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

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

文档简介

EmbeddedSystemDevelopment,嵌入式系统与应用,第8章STM32F10 x的主要模块设计3外部中断,8.3外部中断8.3.1GPIO键盘设计实验8.3.2外部中断EXTI设计,8.3.1GPIO键盘设计实验,GPIO端口如何进行键盘设计?下面两种办法效果一样。一是采用上拉输入模式,按键在没按下的时候,默认为高电平。PE5key1PE6key2二是直接采用浮空输入模式,在芯片外部接上拉电阻。按键实现LED灯反转。,按键原理图,1、按键实现LED灯反转main(),intmain(void)/*configtheled*/LED_GPIO_Config();LED1(ON);/*configkey*/Key_GPIO_Config();while(1)if(Key_Scan(GPIOE,GPIO_Pin_5)=KEY_ON)/*LED1灯反转*/GPIO_WriteBit(GPIOC,GPIO_Pin_3,BitAction(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3);,读取PC3的当前输出电平,当前状态反相后写入到PC3,按键实现LED灯反转,把前面写的Led灯led.c和led.h复制到本工程文件夹,编写main函数:1、先调用了led.c中的LED_GPIO_Config(),配置LED用到的I/O。2、调用LED1(ON),把LED灯1点亮。3、调用Key_GPIO_Config(),配置按键用到的I/O口。4、调用Key_Scan()按键检测函数,监测到按键时,调用GPIO_WriteBit()函数实现灯反转。BitAction枚举定义在stm32f10 x_gpio.h第104行:typedefenumBit_RESET=0,Bit_SETBitAction;,2、bsp_key.h按键函数头文件,主要声明Key_GPIO_Config()、Key_Scan()两个函数:#ifndef_KEY_H/条件编译#define_KEY_H#includestm32f10 x.h#defineKEY_ON0/按键按下标志#defineKEY_OFF1/无按键标志voidKey_GPIO_Config(void);uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);#endif在bsp_key.C文件中实现上两个函数。,3、Key_GPIO_Config()函数,与LED的GPIO初始化函数LED_GPIO_Config()类似。#includebsp_key.hvoidKey_GPIO_Config(void)GPIO_InitTypeDefGPIO_InitStructure;/*开启按键端口GPIOE(PE5)的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,4、Key_Scan()按键检测函数,/*输入:GPIOx、GPIO_Pin:待读取的端口、引脚,*输出:KEY_OFF(没按下按键)、KEY_ON(按下按键)*/u8Key_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin)/*检测是否有按键按下*/if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)=KEY_ON)Delay(10000);/延时消抖if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)=KEY_ON)while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)=KEY_ON);returnKEY_ON;/等待按键释放elsereturnKEY_OFF;elsereturnKEY_OFF;,Key_Scan()按键检测函数,库函数GPIO_ReadInputDataBit(端口号,引脚号);返回引脚的数据,0为低电平即KEY_ON,可能有按键按下,调用延时函数消抖;否则返回1为高电平即KEY_OFF,表示按键没有被按下。延时之后再次读取该引脚数据,若依然为低电平,表明确实有按键被按下了;否则返回KEY_OFF,表示没按键。while循环调用GPIO_ReadInputDataBit(),等待按键释放,条件变为假退出循环,返回表示按键被按下的标志KEY_ON。同理,通过输入不同的实参,来检测其它按键的引脚。这就是库的魅力!,作业,1、进一步熟悉GPIO,掌握GPIO设计。2、掌握GPIO键盘实验,实验报告。,8.3.2STM32中断向量表,上个实验中while(1)程序中始终轮询检测是否有按键按下,浪费CPU时间、能耗。可采用中断处理方式,当按键按下时触发中断再检测按键。STM32的所有GPIO都可以用作外部中断源,可把按键轮询检测改为由中断来处理,大大提高软件执行的效率。向量中断控制器NVIC属于Cortex内核的器件,编号为115的对应系统异常,大于等于16的则全是外部中断。STM32中断向量表,优先级从-3至6(即编号115)为系统异常,优先级为负的不能设置优先级,如复位Reset、不可屏蔽中断NMI、硬错误Hardfault。从优先级7开始(即类型编号16开始)的为外部中断,优先级自行设置。,STM32中断向量表,STM32中断向量表,8.3.3STM32外部中断控制器EXTI,向量中断控制器NVIC能配置16种外部中断EXTIx(015),超过16个中断事件时,必然有2个以上的中断事件使用相同的中断种类。注意:相同种类的中断不能嵌套。,外部中断控制器EXTI配置管理外部事件输入GPIO引脚与EXTIx的连接方式:PAxPGx端口引脚的事件连接同一个EXTIx,分时复用。GPIO事件可配置为下降沿、上升沿或边沿三种模式触发中断。EXTI一个应用:上个实验的按键再添加下降沿触发中断,用中断处理来检测按键。,EXTI15,STM32外部中断控制器EXTI,对于互联型芯片,外部中断控制器由20个产生事件中断请求的边沿检测器组成,其他芯片19个。,STM32外部中断控制器EXTI,每个输入线都可配置输入类型(脉冲或挂起)和对应的触发方式(上升沿或下降沿或者双边沿都触发)。每个输入线都可被屏蔽。挂起寄存器保持着状态线的中断请求。,另外四个EXTI线的连接方式如下:EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USB唤醒事件EXTI线19连接到以太网唤醒事件(只适用于互联型产品),GPIO的x引脚配置为EXTIx,8.3.4EXTI寄存器库中定义,stm32f10 x.h库892行中EXTI寄存器结构定义:typedefstructvu32IMR;/中断屏蔽寄存器,配置20个中断线的屏蔽位vu32EMR;/事件屏蔽寄存器vu32RTSR;/上升沿触发选择寄存器vu32FTSR;/下降沿触发选择寄存器vu32SWIER;/设置软件中断寄存器的请求位vu32PR;/挂起寄存器EXTI_TypeDef;,EXTI寄存器库中定义,#definePERIPH_BASE(uint32_t)0 x40000000)#defineAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#defineEXTI_BASE(APB2PERIPH_BASE+0 x0400)#defineEXTI(EXTI_TypeDef*)EXTI_BASE)EXTI为EXTI_TypeDef结构体型指针地址:0 x40010400EXIT寄存器配置数据位宏定义在3269行开始:。/*BitdefinitionforEXTI_IMRregister*/#defineEXTI_IMR_MR0(uint32_t)0 x00000001)/*!InterruptMaskonline0*/#defineEXTI_IMR_MR1(uint32_t)0 x00000002),8.3.5EXTI库函数stm32f10 x_exti.c,EXTI库函数在文件stm32f10 x_exti.c中定义,8.3.6外部中断与NVIC的关系,外部中断0与NVIC的对应,NVIC寄存器,NVIC库函数,NVIC配置,misc库中NVIC_Init()函数对NVIC初始化,用到NVIC_InitTypeDef结构体,其中四个成员:NVIC_IRQChannel参数来选择将要配置的中断向量;NVIC_IRQChannelCmd参数来进行使能(ENABLE)或关闭(DISABLE)该中断;NVIC_IRQChannelPreemptionPriority成员要配置中断向量的抢占优先级;NVIC_IRQChannelSubPriority需要配置中断向量的响应优先级。NVIC只可配置16种中断向量的优先级:编号越小,优先级别越高;抢占优先级:是指打断其它中断,会出现嵌套中断;响应优先级:先处理响应优先级高的中断;,中断检测按键实验,硬件连接:PE5key1、PE6key2,key1按下时,进入线中断处理函数,LED1状态取反。配置工程环境:除使用GPIO和RCC片上外设;还要使用exti片上外设,stm32f10 x_exti.c包含了支持exti配置和操作的函数;misc.c文件则包含了NVIC的配置函数;本实验中还会在stm32f10 x_it.c中编写中断服务函数。,Main函数,配置好LED用到的I/O后,调用LED1()点亮一盏LED灯;配置中断,等待中断发生。intmain(void)/*configtheled*/LED_GPIO_Config();LED1(ON);/*extilineconfig*/EXTI_PE5_Config();/*waitinterrupt*/while(1),配置外部中断exti.c,EXTI_PE5_Config()函数,配置PE5为线中断口,并设置中断优先级。主要步骤:1.使能EXTIx线的时钟和第二功能AFIO时钟2.配置EXTIx线的中断优先级3.配置EXTI中断线I/O4.选定要配置为EXTI的I/O口线和I/O口的工作模式5.EXTI中断线工作模式配置,EXTI_PE5_Config()函数,8.voidEXTI_PE5_Config(void)9.10.GPIO_InitTypeDefGPIO_InitStructure;11.EXTI_InitTypeDefEXTI_InitStructure;13./*configtheextiline(PE5)clockandAFIOclock*/14.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);16./*configtheNVIC(PE5)*/17.NVIC_Configuration();/NVIC初始化配置19./*EXTIlinegpioconfig(PE5)*/20.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;21.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;/上拉输入,EXTI_PE5_Config()函数_续,22.GPIO_Init(GPIOE,31.,GPIO端口的复用功能AFIO,AFIO(alternate-functionI/O),GPIO除了用作普通的输入输出(主功能),还可以作为片上外设的复用输入输出,如串口,ADC,这些就是复用功能。GPIO还有重映射功能:重映射功能是指把原来属于A引脚的默认复用功能,转移到了B引脚进行使用(当然B引脚具有这个重映射功能)。当把GPIO用作EXTI外部中断或使用重映射功能的时候,必须开启AFIO时钟。代码的第14行,开启了AFIO的时钟。,NVIC初始化配置,EXTI_PE5_Config()调用了NVIC_Configuration()函数来配置NVIC控制器。8.staticvoidNVIC_Configuration(void)9.10.NVIC_InitTypeDefNVIC_InitStructure;12./*Configureonebitforpreemptionpriority*/13.NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);15./*配置PA|B|C|D|E5为中断源*/16.NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;17.NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;18.NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;19.NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;20.NVIC_Init(/向寄存器写入参数21.,把NVIC中断优先级分组设置为第1组,要配置的为EXTI第59线的中断向量,抢占优先级和响应优先级,设为最高,编写中断服务函数,PE5连接到内部的EXTI5,GPIO配置为上拉输入,工作在下降沿中断。在外围电路上我们将PE5接到了key1上。PE5始终为高,当按键按下时,下降沿跳变,EXTI5会捕捉到这一跳变

温馨提示

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

评论

0/150

提交评论