GPIO和中断学习课件_第1页
GPIO和中断学习课件_第2页
GPIO和中断学习课件_第3页
GPIO和中断学习课件_第4页
GPIO和中断学习课件_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

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

文档简介

GPIO和中断学习课件第1页/共116页GPIO特色多大80多种功能的双向IO:共5个端口(A、B、C、D、E)每个端口共16位标准IO口可承受5V电压IO口可吸纳25mA电流18MHZ的翻转速度可配置输出速度达到50MHZ多达16路模拟输入第2页/共116页GPIO功能描述每个GPI/O端口有:两个配置寄存器(GPIOx_CRL,GPIOx_CRH)两个数据寄存器(GPIOx_IDR和GPIOx_ODR)一个置位/复位寄存器(GPIOx_BSRR),一个复位寄存器(GPIOx_BRR)一个锁定寄存器(GPIOx_LCKR)。第3页/共116页I/O引脚的8种配置模式输入:浮空上/下拉模拟输入输出:可配置上/下拉的推挽输出开漏输出第4页/共116页推挽输出:可以输出高,低电平,连接数字器件

开漏输出:输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

第5页/共116页每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问第6页/共116页端口位配置表第7页/共116页I/O端口位的基本结构第8页/共116页输入浮空/上拉/下拉配置第9页/共116页输出配置第10页/共116页复用功能配置第11页/共116页复用功能对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。第12页/共116页模拟输入配置第13页/共116页GPIO寄存器的操作SM32F10X硬件文档.PDF第14页/共116页GPIO_Mode值第15页/共116页例如:IO配置GPIO_Mode_AIN=0x0,

模拟输入

GPIO_Mode_IN_FLOATING=0x04,

浮空输入

GPIO_Mode_Out_OD=0x14,

表示配置相应管脚为GPIO开漏输出(真双向IO)GPIO_Mode_Out_PP=0x10,

通用推挽输出模式GPIO_Mode_AF_OD=0x1C,

表示配置相应管脚为复用功能的开漏输出GPIO_Mode_AF_PP=0x18

复用功能的推挽输出模式第16页/共116页配置GPIO口GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);第17页/共116页GPIO_Pin

注意:使用操作符“|”可以一次选中多个管脚。可以使用下表中的任意组合第18页/共116页GPIO库函数第19页/共116页函数GPIO_Init

GPIO_Init(GPIOD,&GPIO_InitStructure);第20页/共116页函数GPIO_StructInit

第21页/共116页GPIO_InitStruct缺省值GPIO_InitTypeDefGPIO_InitStructure;GPIO_StructInit(&GPIO_InitStructure);第22页/共116页函数GPIO_SetBits

例如:对A口的13GPIO置位GPIO_SetBits(GPIOA,GPIO_Pin_13);第23页/共116页函数GPIO_ResetBits

例如:对C口的15GPIO清除位GPIO_ResetBits(GPIOC,GPIO_Pin_15);第24页/共116页函数GPIO_WriteBit

例如:对C口的GPIO5管脚写入1GPIO_WriteBit(GPIOA,GPIO_Pin_5,0x20);第25页/共116页函数GPIO_Write

例如:对D口写入一串数据GPIO_Write(GPIOD,0x1101);第26页/共116页函数GPIO_ReadOutputDataBit

例如:读出B口的GPIO8的数据GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_8);第27页/共116页GPIO固件库外设类型定义外设声明定义外设类型外设地址定义何处定义的?第28页/共116页第29页/共116页试计算GPIOA_BASE实际地址对照内存地址分配进行分析第30页/共116页GPIO完整的固件库stm32f10x_gpio.c是用C语言编写的GPIO的驱动源程序文件stm32f10x_gpio.cstm32f10x_gpio.hgpio的头文件,包含函数定义以及函数使用的变量stm32f10x_gpio.h文件.doc第31页/共116页例如:对端口 A的8脚进行数据的读取,如果其数据位1,就写零;如果是0,就写1。

main(){longvalue;value=GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8);If(value==0)GPIO_WriteBit(GPIOA,GPIO_Pin_8,0x100);elseGPIO_WriteBit(GPIOA,GPIO_Pin_8,0x00);}第32页/共116页函数GPIO_ReadOutputData

读出C口的数据ReadValue=GPIO_ReadOutputData(GPIOC);

第33页/共116页函数GPIO_PinLockConfig

锁定A口的0和1管脚GPIO_PinLockConfig(GPIOA,GPIO_Pin_0|GPIO_Pin_1);第34页/共116页GPIO编程实现步骤1启动外设模块2设定管脚控制模式3对GPIO寄存器进行操作第35页/共116页例如:实现下列LED的闪烁程序第36页/共116页#include"stm32f10x.h"intmain(void){//打开相应外设的时钟:GPIOBRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//初始化GPIOB,用于驱动LEDGPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速度为50MHzGPIO_Init(GPIOB,&GPIO_InitStructure);while(1){GPIO_SetBits(GPIOB,GPIO_Pin_8);//点亮LED1Delay(1000000);//多点亮一会,使人能看到LED的确切变化

Delay(1000000);GPIO_ResetBits(GPIOB,GPIO_Pin_8);//熄灭LED1Delay(1000000);Delay(1000000);}}voidDelay(vu32nCount){for(;nCount!=0;nCount--);}第37页/共116页例如:实现下列LED的闪烁程序第38页/共116页#include"stm32f10x.h“#defineLED_ALLGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4intmain(void){unsignedcharj=0;chLsd=0xFE;//打开相应外设的时钟:GPIOARCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=LED_ALL;//初始化GPIOA,用于驱动LEDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速度为50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);while(1){

GPIO_Write(GPIOA,chLsd);Delay(10);chLsd<<=1;j++;if(j>0x05){chLsd=0XFE;j=0;}}}voidDelay(nCount){for(;nCount!=0;nCount--);}第39页/共116页例如:实现下列LED的闪烁程序GPIO课程实验程序.doc第40页/共116页对C口的6个GPIO管脚进行操作,设计花样流水灯第41页/共116页#include"stm32f10x.h“#defineLED_ALLGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5intmain(void){unsignedcharj=0;chLsd=0xFF;//打开相应外设的时钟:GPIOARCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=LED_ALL;//初始化GPIOA,用于驱动LEDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;//最高输出速度为50MHzGPIO_Init(GPIOC,&GPIO_InitStructure);while(1){GPIO_Write(GPIOA,chLsd);Delay(10);chLsd<<=1;j++;if(j>0x05){chLsd=0XFE;j=0;}}}voidDelay(nCount){for(;nCount!=0;nCount--);}第42页/共116页例:实现按键控制LED的亮灭,按下按键时,等灭第43页/共116页按键程序按键程序.doc第44页/共116页嵌套向量中断控制器特性68个可屏蔽中断通道(不含16个M3的中断线);

16个可编程的优先等级(使用4位中断优先级);低延迟的异常和中断处理;电源管理控制;系统控制寄存器的实现;第45页/共116页中断处理情况:中断处理流程图第46页/共116页占先流程第47页/共116页中断返回流程图第48页/共116页外部中断/事件控制器(EXTI)

对于互联型产品,外部中断/事件控制器由20个产生事件/中断请求的边沿检测器组成对于其它产品,则有19个能产生事件/中断请求的边沿检测器。每个输入线可独立地配置输入类型(脉冲或挂起)可配置对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可独立地被屏蔽。挂起寄存器保持着状态线的中断请求。第49页/共116页EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时钟宽度的外部信号。第50页/共116页外部中断/事件控制器框图第51页/共116页功能说明产生中断,必须先配置中断线。根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写’1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置’1’。在挂起寄存器的对应位写’1’,将清除该中断请求。产生事件,必须先配置事件线。根据需要的边沿检测通过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写’1’允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置’1’。通过在软件中断/事件寄存器写’1’,也可以通过软件产生中断/事件请求。第52页/共116页外部中断/事件线路映像第53页/共116页另外四个EXTI线的连接方式如下:

EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件

EXTI线18连接到USB唤醒事件

EXTI线19连接到以太网唤醒事件(只适用于互联型产品)第54页/共116页EXTI寄存器第55页/共116页EXTI寄存器描述SM32F10X硬件文档.PDF第56页/共116页EXTI库函数第57页/共116页1、函数EXTI_DeInit

第58页/共116页2、函数EXTI_Init

第59页/共116页EXTI_Line值第60页/共116页EXTI_Mode设置了被使能线路的模式1、EXTI_Mode值2、EXTI_Trigger值第61页/共116页例如具体的配置初始化方式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_InitStructure);第62页/共116页函数EXTI_StructInit

第63页/共116页EXTI_InitStruct缺省值第64页/共116页函数EXTI_GenerateSWInterrupt

产生EXTI_6的中断信息EXTI_GenerateSWInterrupt(EXTI_Line6);第65页/共116页函数EXTI_GetFlagStatus

FlagStatusEXTIStatus;EXTIStatus=EXTI_GetFlagStatus(EXTI_Line8);第66页/共116页函数EXTI_ClearFlag

/*清除EXTI3的挂起标志位*/EXTI_ClearFlag(EXTI_Line3);第67页/共116页函数EXTI_GetITStatus

/*检查EXTI8的触发状态*/ITStatusEXTIStatus;EXTIStatus=EXTI_GetITStatus(EXTI_Line8);第68页/共116页函数EXTI_ClearITPendingBit

/*清除EXTI2

的挂起位*/EXTI_ClearITpendingBit(EXTI_Line2);第69页/共116页嵌套向量中断控制器(NVIC)函数NVIC驱动有多种用途:使能或者失能IRQ中断,使能或者失能单独的IRQ通道,改变IRQ通道的优先级。第70页/共116页函数NVIC_PriorityGroupConfig第71页/共116页/*ConfigurethePriorityGroupingwith1bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);第72页/共116页函数NVIC_Init

第73页/共116页/*配置一位的优先级组*/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_InitStructure);第74页/共116页函数NVIC_Init

第75页/共116页NVIC_IRQChannel值第76页/共116页续上第77页/共116页例/*使能EXTI1全局中断优先为1次优先为2*/NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;NVIC_InitStructure(&NVIC_InitStructure);第78页/共116页函数NVIC_StructInit

NVIC_StructInit(&NVIC_InitStructure);第79页/共116页函数NVIC_SetVectorTable

第80页/共116页NVIC_VectTab值/*设置在FLASH的向量表地址为0x0*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);第81页/共116页NVIC_InitTypeDefNVIC_InitStructure;/*设置向量表基地址为0x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000);/*配置优先级组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(&NVIC_InitStructure);第82页/共116页函数GPIO_EXTILineConfig

/*设置B口的8管脚问哦8号中短线*/GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);第83页/共116页GPIO_PortSource值第84页/共116页例:实现按键控制LED的亮灭,用中断方式进行控制第85页/共116页第86页/共116页时钟初始化voidRCC_Configuration(void){/*EnableKeyButtonGPIOPort,GPIO_LEDandAFIOclock*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);}第87页/共116页初始化按键和LEDvoidGPIO_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,&GPIO_InitStructure);/*ConfigureKeyButtonGPIOPinasinputfloating*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC,&GPIO_InitStructure);}第88页/共116页初始化NVICvoidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);/*Configureonebitforpreemptionpriority*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*EnabletheEXTI2Interrupt*/NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}第89页/共116页初始化中断voidEXTI_Configuration(void){GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,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(&EXTI_InitStructure);EXTI_GenerateSWInterrupt(EXTI_Line1);//软件模拟一次中断}第90页/共116页主函数voidmain(void){RCC_Configuration();//时钟初始化

NVIC_Configuration();//嵌套向量中断控制初始化

GPIO_Configuration();//按键和LED初始化

EXTI_Configuration();//中断初始化

GPIOSetBits(GPIOA,GPIO_Pin_1);while(1){}}第91页/共116页中断子函数#include"stm32f10x_it.h"voidEXTI1_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);}}第92页/共116页例:用中断方式实现下图中LED一亮一灭第93页/共116页第94页/共116页时钟初始化voidRCC_Configuration(void){/*EnableKeyButtonGPIOPort,GPIO_LEDandAFIOclock*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);}第95页/共116页初始化按键和LEDvoidGPIO_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,&GPIO_InitStructure);/*ConfigureKeyButtonGPIOPinasinputfloating*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);}第96页/共116页初始化NVICvoidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);/*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(&NVIC_InitStructure);}第97页/共116页初始化中断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(&EXTI_InitStructure);EXTI_GenerateSWInterrupt(EXTI_Line1);//软件模拟一次中断}第98页/共116页主函数voidmain(void){RCC_Configuration();//时钟初始化

NVIC_Configuration();//嵌套向量中断控制初始化

GPIO_Configuration();//按键和LED初始化

EXTI_Configuration();//中断初始化

GPIOSetBits(GPIOA,GPIO_Pin_4);GPIOResetBits(GPIOA,GPIO_Pin_5);while(1){}}第99页/共116页中断子函数#include"stm32f10x_it.h"voidEXTI1_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);}}第100页/共116页例:用中断方式实现下图中各自按键控制一个LED的亮灭程序第101页/共116页第102页/共116页时钟初始化voidRCC_Configuration(void){/*EnableKeyButtonGPIOPort,GPIO_LEDandAFIOclock*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);}第103页/共116页初始化按键和LEDvoidGPIO_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,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC,&GPIO_InitStructure);/*初始化按键PD2和LED的PB4*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);}第104页/共116页初始化NVICvoidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);/*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(&NVIC_InitStructure);/*配置次优先次的按键PC3*/NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_Init(&NVIC_InitStructure);}第105页/共116页初始化中断voidEXTI_Configuration(void){/*按键PD2的中断配置*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource2);EXTI_InitStructure.EXTI_Line=EXTI_Line2;//使用2号中断通道

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_GenerateSWInterrupt(EXTI_Line2);//软件模拟一次中断

/*按键PC3的中断配置*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);EXTI_InitStructure.EXTI_Line=EXTI_Line3;//使用3号中断通道

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);EXTI_GenerateSW

温馨提示

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

评论

0/150

提交评论