stm32串口中断总结_第1页
stm32串口中断总结_第2页
stm32串口中断总结_第3页
stm32串口中断总结_第4页
stm32串口中断总结_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

本文以USARTI为例,表达串口中断的编程过程。1、先来讲述一下在应用串口中断时涉及到的一些库文件。首先对于STM32外设库文件的应用编程,misc.c和stm32f10*_rcc.c是肯定要添加到。接下来就是我们要用到的相关外设了。毫无疑问,串口文件stm32f10*_usart.c是必须的。串口通信是对通用GPIO端口引脚的功能复用,所以还需要stm32f10*_gpio.c文件。另外,因为有中断的产生,所以中断文件stm32f10*_it.c也是必要的,当然这个文件一般和main.C放在一个文件夹下(一般习惯为User文件夹),因为我们的中断响应函数是要在里面自己编写的。当然还有其他的根本必须文件如系统配置文件等在这地方就不说了,这个是创立一个工程应该知道的。2、初始化对于串口通信的初始化,不仅仅只是对串口的初始化(这个地方是比拟烦人的,不像别的芯片那样简洁明了)。首先时钟使能配置。STM32部的时钟有很多,感兴趣的自己看看参考手册。此处以USARTI为例说明。有USARTI时钟、GPIOA时钟、GPIO复用(AFIO)时钟。由于此处USARTI和GPIOA、AFIO均在APB2上,所以可以一次配置完成。如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);其次中断配置。主要有优先级组设定、USART1中断使能、该中断的优先级,中断初始化。程序如下:voidNVIC_COnfigUration(void){NVICJnitTypeDefNVICJnitStructure;NVIC_PriOrityGroupConfig(NVIC_PriOrityGrOUp_0);//选择分组方式0/*使能USART1中断*/NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelSUbPriOrity=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}然后GPIO复用功能配置。一般情况下我们使用原始的外设和GPIO端口引脚的映射关系,如果要改变其映射的话,请另外查看参考手册上关于GPIO重映射局部。对于GPIO的复用,其引脚的输入与输出模式都有要求,在参考手册上有详细说明。voidGPIO_COnfigUration(void){GPIOJnitTypeDefGPIOJnitStructure;/*配置USART1R*作为浮空输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(USARTy_GPIO,&GPIO_InitStructure);/*配置USART1T*作为推挽输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(USARTy_GPIO,&GPIO_InitStructure);}串口初始化配置。主要有串口根本参数配置(如波特率、数据位、工作方式等),串口中断使能,串口使能。(1)根本参数配置USARTJnitTypeDefUSARTJnitStructure;USART_InitStructure.USART_BaudRate=9600;//波特率USART_InitStructure.USART_WordLength=USART_WordLength_8b;//数据长度USART_InitStructure.USART_StopBits=USART_StopBits_1;//停顿位USART_InitStructure.USART_Parity=USART_Parity_No;//校验USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制无USART_InitStructure.USART_Mode=USART_Mode_R*|USART_Mode_T*;//发送与承受两种方式USART_Init(USART1,&USART_InitStructure);//用配置的参数惊喜串口初始化(2)串口中断使能USART_ITConfig(USARTy,USART_IT_R*NE,ENABLE);//使能承受中断,在承受移位存放器中有数据是产生USART_ITConfig(USARTy,USART_IT_T*E,ENABLE);//使能发送中断,在发送完数据后产生。一般情况下,如果与PC通信的话,我们只用承受中断即可。⑶串口使能USART_Cmd(USART1,ENABLE);//USARTI使能好了,经过以上不走之后呢,我们就可以进展数据的收发了。3、发送数据使用函数USART_SendData(USART1,Chardata),一次只能发送一个字符。当然我们可以用如下函数发送字符串。voidUSARTI_Puts(Char*Str){while(*str){USART_SendData(USART1,*str++);//发送一个字符While(USART_GetFlagStatus(USART1,USART_FLAG_T*E)==RESET);//等待发送完毕}}当然我们也可以循环发送字符串数组for(i=0;T*Buf1!='\0';i++)//T*Buf1为定义好的字符串数组(USART_SendData(USART2,T*Buf1);while(USART_GetFIagStatUs(USART2,USART_FLAG_TC)==RESET);}4、接收数据由于我们使用的是承受中断所以当有数据需要接收时,会执相应的中断函数。此处我们USARTI的中断函数在stm32f10*_it.c文件中。找到函数voidUSART1_IRQHandler(void)如果没有的话就自己加上吧别忘了头文件中需要声明一下。当然你也可以在其他文件中写下该中断函数当产生中断进入该函数之后我们就可以进展自己的操作了。voidUSARTy_IRQHandler(VOid){if(USART_GetITStatus(USARTy,USART_IT_R*NE)!=RESET)//如果存放器中有数据{/*Readonebytefromthereceivedataregister*/R*Buffer1[R*Counter1++]=USART_ReceiveData(USART1);}/*i*'j:*'j1**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i*'j:*'j:*'j:*/∙>jj≈∙*∙>jj≈∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*if(USART_GetITStatus(USARTy,USART_IT_T*E)!=RESET){USART_SendData(USARTy,T*Buffer1[T*Counter1++]);}〃这个地方那个之所以把这个写出来主要是想说发送中断和承受中断其实是共用一个〃中断函数的,到底是那个中断发生了呢,这就需要我们读取中断状态标志来识别了。xi*'j:*'j:*sl**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i**i*'j:*'j:*/∙>jjj∙*∙>jjj∙*∙>jjj∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJi∙*∙>jJj∙*∙>jjj∙*∙>jjj∙*/}别忘了在承受完数据进展别的操作之前为了防止数据被覆盖最好先制止一下承受中断/*制止USARTI接收中断*/USART_ITCOnfig(USART1,USART_IT_R*NE,DISABLE);/*制止USARTI发送中断*/USART_ITCOnfig(USART1,USART_IT_T*E,DISABLE);5、m&徐函数intmain(void)//这个地方和特别,我们知道一般Inain函数是没有返回值的,但在STM32//的编程中其返回类型为nt。{RCC_COnfiguration();NVIC_COnfiguration();GPIO_COnfiguration();USART_InitStructure.USART_BaudRat=9600;USART_InitStructure.USART_WordLengt=USART_WOrdLength_8b;USART_InitStructure.USART_StopBit=USART_StOpBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControlUSART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_R*|USART_Mode_T*;USART_Init(USART1,&USART_InitStructure);USART_ITCOnfig(USARTqUSART_IT_R*NE,ENABLE);//USART_ITCOnfig(USART1,USART_IT_T*E,ENABLE);USART_Cmd(USART1,ENABLE);while(1)//等待中断{}}当然你也可以在想足()中添加一些发送指令之类的东西。以上容为个人总结,请注明出处。假设有错误,本人概不负任何责任。STM32外部中断配NVIC_Configuration函数实现配置嵌套向量中断中断优先级并使能中断。其中的NVIJPriorityGroupConfig函数配置中断优先级的组织方式,STM32的嵌套向量中断控制器可以配置16个可编程的优先等级,使用了4位表示中断优先级〔2的4此方就是16〕,16个可编程的优先等级又可以分为主优先级和次优先级,例如参数NVIC_PriorityGroup_1表示1bit主优先级〔pre-emptionpriority〕3bits次优先级〔subpriority〕。一、配置中断分配中断向量表:/*SettheVectorTablebaselocationat0*20000000*/NVIC_SetVectorTable(NVIC_VectTab_RAM,0*0);设置中断优先级:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置中断优先级初始化外部中断:/*允许E*TI4中断*/NVIC_InitStructure.NVIC_IRQChannel=E*TI4_IRQChannel;//中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=PreemptionPriorityValue;//占先优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//响应〔次级〕优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//通道中断使能NVIC_Init(&NVIC_InitStructure); //初始化中断注意:如果我们配置的外部针脚为PA4,或PB4,或PC4,PD4等,则采用的外部中断也必须是E*TI4,同样,如果外部中断针脚是PA1,PB1,PC1,PD1则中断就要用E*TI1,其他类推。二、配置GPIO针脚作为外部中断的触发事件1、选择IO针脚GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;注意,如果的针脚是端口的4号针脚,配置的中断一定是E*TI4配置针脚为输入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;初始化针脚GPIO_Init(GPIOD,&GPIO_InitStructure);3配置E*TI线,使中断线和IO针脚线连接上1、将E*TI线连接到IO端口上将E*TI线4连接到端口GPIOD的第4个针脚上GPIO_E*TILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource4);注意:如果配置的针脚是4号,则参数必须是GPIO_PinSource4如果配置的针脚是3号,则参数必须是GPIO_PinSource32、配置中断边沿/*配置E*TI线4上出现下降沿,则产生中断*/E*TI_InitStructure.E*TI_Line=E*TI_Line4;注意:如果配置的4号针脚,则E*TI_Line4是必须的E*TI_InitStructure.E*TI_Mode=E*TI_Mode_Interrupt;E*TI_InitStructure.E*TI_Trigger=E*TI_Trigger_Falling;//下降沿触发E*TI_InitStructure.E*TI_LineCmd=ENABLE; //中断线使能E*TI_Init(&E*TI_InitStructure); //初始化中断E*TI_GenerateSWInterrupt(E*TI_Line4); //E*TI_Line4中断允许到此中断配置完成,可以写中断处理函数。举例:配置函数函数名NVIC_Configration描述 配置各个中断存放器voidNVIC_Configration(void){NVIC_InitTypeDefNVIC_InitStructure;//#ifdefVECT_TAB_RAM/*SettheVectorTablebaselocationat0*20000000*/NVIC_SetVectorTable(NVIC_VectTab_RAM,0*0);//#else/*VECT_TAB_FLASH*//*SettheVectorTablebaselocationat0*08000000*///NVIC_SetVectorTable(NVIC_VectTab_FLASH,0*0);//#endifNVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置中断优先级/*允许E*TI4中断*/NVIC_InitStructure.NVIC_IRQChannel=E*TI4_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriorityPreemptionPriorityValue;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);/*允许E*TI9中断*/NVIC_InitStructure.NVIC_IRQChannel=E*TI9_5_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);/*配置SysTick处理优先级:优先级以及子优先级*/}*函数名GPIO_Configuration(void)*描述 配置TIM2针脚voidGPIO_Configuration(void){/*GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);/*配置GPIOD的第一个管角为浮动输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);/*配置GPIOB的第9个管脚为浮动输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);}函数 SysTick_Configuration描述 设置SysTiCkvoidSysTiCk_Configuration(void){/*配置HCLK时钟做为SysTick时钟源*/SysTiCk_CLKSourCeConfig(SysTiCk_CLKSourCe_HCLK_Div8);//系统时钟8分频72MHzNVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,8,2);/*SysTickInterrupteach1000HzwithHCLKequalto72MHz*/SysTiCk_SetReload(9000);//中断周期1ms/*EnabletheSysTickInterrupt*/SysTiCk_ITConfig(ENABLE);//翻开中断SysTick_CounterCmd(SysTick_Counter_Enable);SysTick_CounterCmd(SysTick_Counter_Clear);}**函数名E*TI_Configuration*描述 配置E*TI线个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个个/voidE*TI_Configuration(void){/*将E*TI线4连接到PD4*/GPIO_E*TILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource4);/*配置E*TI线4上出现下降沿,则产生中断*/E*TI_InitStructure.E*TI_Line=E*TI_Line4;E*TI_InitStructure.E*TI_Mode=E*TI_Mode_Interrupt;E*TI_InitStructure.E*TI_Trigger=E*TI_Trigger_Falling;E*TI_InitStructure.E*TI_LineCmd=ENABLE;E*TI_Init(&E*TI_InitStructure);E*TI_GenerateSWInterrupt(E*TI_Line4);/*将E*TI线9连接到PB9上*/GPIO_E*TILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);/*将E*TI线9上出现下降沿产生中断*/E*TI_InitStructure.E*TI_Line=E*TI_Line9;E*TI_InitStructure.E*TI_Mode=E*TI_Mode_Interrupt;E*TI_InitStructure.E*TI_Trigger=E*TI_Trigger_Falling;E*TI_InitStructure.E*TI_LineCmd=ENABLE;E*TI_Init(&E*TI_InitStructure);E*TI_GenerateSWInterrupt(E*TI_Line9);}中断函数:voidE*TI4_IRQHandler(void){if(E*TI_GetITStatus(E*TI_Line4)!=RESET){if(Ledflag==0){Ledflag=1;GPIOC->ODR|=0*00000080;}else{Ledflag=0;GPIOC->ODR&=0*FFFFFF7F;}}E*TI_ClearITPendingBit(E*TI_Line4);〃去除E*TI0线路挂起位}注:时钟设置的时候最好加上这句RCCRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO时钟**************************************************************例程名称:外部中断实验实验硬件:DP-miniSTM32硬件连接:指示灯连接PA1按钮连接PA3功能描述:本例程实现外部中断的输入试验,按下按钮,指示灯闪烁一下#include<stm32f10*_lib.h> // STM32F10*LibraryDefinitions#include"STM32_Init.h"//STM32Initialization*名称:Delay()voidDelay(vu16t){uint16i,j;for(i=0;i<t;i++){for(j=0;j<1000;j++){}}}*名称:RCC_Configuration()voidRCC_Configuration(void){ErrorStatusHSEStartUpStatus;//使能外部晶振RCC_HSEConfig(RCC_HSE_ON);//等待外部晶振稳定HSEStartUpStatus=RCC_WaitForHSEStartUp();//如果外部晶振启动成功,则进展下一步操作if(HSEStartUpStatus==SUCCESS){〃设置HCLK〔AHB时钟〕=SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);//PCLK1(APB1)=HCLK/2RCC_PCLK1Config(RCC_HCLK_Div2);//PCLK2(APB2)=HCLKRCC_PCLK2Config(RCC_HCLK_Div1);RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4);〃启动PLLRCC_PLLCmd(ENABLE);〃等待PLL稳定while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);〃系统时钟SYSCLK来自PLL输出RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//切换时钟后等待系统时钟稳定while(RCC_GetSYSCLKSource()!=0*08);}/*RCCsystemreset(fordebugpurpose)*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//给GPIOA和重映射提供时钟,注意:一定要设置RCC_APB2Periph_AFIO}*名称:GPIO_Configuration()voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;/*设置PA3为输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);/*设置PA1为输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);}*名称:E*TI_Configuration()voidE*TI_Configuration(void){E*TI_InitTypeDefE*TI_InitStructure;/*ConfigureE*TILine3togenerateaninterruptonfallingedge*/E*TI_InitStructure.E*TI_Line=E*TI_Line3; //外部中断通道3E*TI_InitStructure.E*TI_Mode=E*TI_Mode_Interrupt;E*TI_InitStructure.E*TI_Trigger=E*TI_Trigger_Falling; //下降沿触发E*TI_InitStructure.E*TI_LineCmd=ENABLE; //使能E*TI_Init(&E*TI_InitStructure);GPIO_E*TILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);〃将PA3连接到外部中断通道3}*名称:NVIC_Configuration()voidNVIC_Configuration(void){NVIC_InitTypeDefNVIC_InitStructure;#ifdefVECT_TAB_RAM/*SettheVectorTablebaselocationat0*20000000*/NVIC_SetVectorTable(NVIC_VectTab_RAM,0*0);#else/*VECT_TAB_FLASH*//*SettheVectorTablebaselocationat0*08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0*0);#endifNVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //抢占式优先级别设置为无抢占优先级NVIC_InitStructure.NVIC_IRQChannel=E*TI3_IRQChannel; //指定中断源NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //指定响应优先级别1NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能外部中断通道3NVIC_Init(&NVIC_InitStructure);}intmain(void){RCC_Configuration();//配置时钟GPIO_Configuration();〃配置IO口NVIC_Configuration();//中断配置E*TI_Configuration();//外部中断配置while(1){}}*说明:将LED灯的连接到PA1voidE*TI3_IRQHandler(void){if(E*TI_GetITStatus(E*TI_Line3)!=RESET){//添加中断处理程序GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0);Delay(1000);GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)1);Delay(1000);E*TI_ClearFlag(E*TI_Line3); //去除中断标志〔必须〕E*TI_ClearITPendingBit(E*TI_Line3);//以上两条语句作用一样}}在使用E*TI的时候,因为没有开启时钟没有开启RCC_A

温馨提示

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

评论

0/150

提交评论