stm32串口中斷總結(jié)_第1頁
stm32串口中斷總結(jié)_第2頁
stm32串口中斷總結(jié)_第3頁
stm32串口中斷總結(jié)_第4頁
stm32串口中斷總結(jié)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

本文以USARTI為例,表達串口中斷的編程過程。1、先來講述一下在應用串口中斷時涉及到的一些庫文件。首先對于STM32外設庫文件的應用編程,misc.c和stm32f10*_rcc.c是肯定要添加到。接下來就是我們要用到的相關外設了。毫無疑問,串口文件stm32f10*_usart.c是必須的。串口通信是對通用GPIO端口引腳的功能復用,所以還需要stm32f10*_gpio.c文件。另外,因為有中斷的產(chǎn)生,所以中斷文件stm32f10*_it.c也是必要的,當然這個文件一般和main.C放在一個文件夾下(一般習慣為User文件夾),因為我們的中斷響應函數(shù)是要在里面自己編寫的。當然還有其他的根本必須文件如系統(tǒng)配置文件等在這地方就不說了,這個是創(chuàng)立一個工程應該知道的。2、初始化對于串口通信的初始化,不僅僅只是對串口的初始化(這個地方是比擬煩人的,不像別的芯片那樣簡潔明了)。首先時鐘使能配置。STM32部的時鐘有很多,感興趣的自己看看參考手冊。此處以USARTI為例說明。有USARTI時鐘、GPIOA時鐘、GPIO復用(AFIO)時鐘。由于此處USARTI和GPIOA、AFIO均在APB2上,所以可以一次配置完成。如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);其次中斷配置。主要有優(yōu)先級組設定、USART1中斷使能、該中斷的優(yōu)先級,中斷初始化。程序如下: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);}串口初始化配置。主要有串口根本參數(shù)配置(如波特率、數(shù)據(jù)位、工作方式等),串口中斷使能,串口使能。(1)根本參數(shù)配置USARTJnitTypeDefUSARTJnitStructure;USART_InitStructure.USART_BaudRate=9600;//波特率USART_InitStructure.USART_WordLength=USART_WordLength_8b;//數(shù)據(jù)長度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*;//發(fā)送與承受兩種方式USART_Init(USART1,&USART_InitStructure);//用配置的參數(shù)驚喜串口初始化(2)串口中斷使能USART_ITConfig(USARTy,USART_IT_R*NE,ENABLE);//使能承受中斷,在承受移位存放器中有數(shù)據(jù)是產(chǎn)生USART_ITConfig(USARTy,USART_IT_T*E,ENABLE);//使能發(fā)送中斷,在發(fā)送完數(shù)據(jù)后產(chǎn)生。一般情況下,如果與PC通信的話,我們只用承受中斷即可。⑶串口使能USART_Cmd(USART1,ENABLE);//USARTI使能好了,經(jīng)過以上不走之后呢,我們就可以進展數(shù)據(jù)的收發(fā)了。3、發(fā)送數(shù)據(jù)使用函數(shù)USART_SendData(USART1,Chardata),一次只能發(fā)送一個字符。當然我們可以用如下函數(shù)發(fā)送字符串。voidUSARTI_Puts(Char*Str){while(*str){USART_SendData(USART1,*str++);//發(fā)送一個字符While(USART_GetFlagStatus(USART1,USART_FLAG_T*E)==RESET);//等待發(fā)送完畢}}當然我們也可以循環(huán)發(fā)送字符串數(shù)組for(i=0;T*Buf1!='\0';i++)//T*Buf1為定義好的字符串數(shù)組(USART_SendData(USART2,T*Buf1);while(USART_GetFIagStatUs(USART2,USART_FLAG_TC)==RESET);}4、接收數(shù)據(jù)由于我們使用的是承受中斷所以當有數(shù)據(jù)需要接收時,會執(zhí)相應的中斷函數(shù)。此處我們USARTI的中斷函數(shù)在stm32f10*_it.c文件中。找到函數(shù)voidUSART1_IRQHandler(void)如果沒有的話就自己加上吧別忘了頭文件中需要聲明一下。當然你也可以在其他文件中寫下該中斷函數(shù)當產(chǎn)生中斷進入該函數(shù)之后我們就可以進展自己的操作了。voidUSARTy_IRQHandler(VOid){if(USART_GetITStatus(USARTy,USART_IT_R*NE)!=RESET)//如果存放器中有數(shù)據(jù){/*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++]);}〃這個地方那個之所以把這個寫出來主要是想說發(fā)送中斷和承受中斷其實是共用一個〃中斷函數(shù)的,到底是那個中斷發(fā)生了呢,這就需要我們讀取中斷狀態(tài)標志來識別了。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?*/}別忘了在承受完數(shù)據(jù)進展別的操作之前為了防止數(shù)據(jù)被覆蓋最好先制止一下承受中斷/*制止USARTI接收中斷*/USART_ITCOnfig(USART1,USART_IT_R*NE,DISABLE);/*制止USARTI發(fā)送中斷*/USART_ITCOnfig(USART1,USART_IT_T*E,DISABLE);5、m&徐函數(shù)intmain(void)//這個地方和特別,我們知道一般Inain函數(shù)是沒有返回值的,但在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)//等待中斷{}}當然你也可以在想足()中添加一些發(fā)送指令之類的東西。以上容為個人總結(jié),請注明出處。假設有錯誤,本人概不負任何責任。STM32外部中斷配NVIC_Configuration函數(shù)實現(xiàn)配置嵌套向量中斷中斷優(yōu)先級并使能中斷。其中的NVIJPriorityGroupConfig函數(shù)配置中斷優(yōu)先級的組織方式,STM32的嵌套向量中斷控制器可以配置16個可編程的優(yōu)先等級,使用了4位表示中斷優(yōu)先級〔2的4此方就是16〕,16個可編程的優(yōu)先等級又可以分為主優(yōu)先級和次優(yōu)先級,例如參數(shù)NVIC_PriorityGroup_1表示1bit主優(yōu)先級〔pre-emptionpriority〕3bits次優(yōu)先級〔subpriority〕。一、配置中斷分配中斷向量表:/*SettheVectorTablebaselocationat0*20000000*/NVIC_SetVectorTable(NVIC_VectTab_RAM,0*0);設置中斷優(yōu)先級:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//設置中斷優(yōu)先級初始化外部中斷:/*允許E*TI4中斷*/NVIC_InitStructure.NVIC_IRQChannel=E*TI4_IRQChannel;//中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=PreemptionPriorityValue;//占先優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應〔次級〕優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//通道中斷使能NVIC_Init(&NVIC_InitStructure); //初始化中斷注意:如果我們配置的外部針腳為PA4,或PB4,或PC4,PD4等,則采用的外部中斷也必須是E*TI4,同樣,如果外部中斷針腳是PA1,PB1,PC1,PD1則中斷就要用E*TI1,其他類推。二、配置GPIO針腳作為外部中斷的觸發(fā)事件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號,則參數(shù)必須是GPIO_PinSource4如果配置的針腳是3號,則參數(shù)必須是GPIO_PinSource32、配置中斷邊沿/*配置E*TI線4上出現(xiàn)下降沿,則產(chǎn)生中斷*/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;//下降沿觸發(fā)E*TI_InitStructure.E*TI_LineCmd=ENABLE; //中斷線使能E*TI_Init(&E*TI_InitStructure); //初始化中斷E*TI_GenerateSWInterrupt(E*TI_Line4); //E*TI_Line4中斷允許到此中斷配置完成,可以寫中斷處理函數(shù)。舉例:配置函數(shù)函數(shù)名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);//設置中斷優(yōu)先級/*允許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處理優(yōu)先級:優(yōu)先級以及子優(yōu)先級*/}*函數(shù)名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);}函數(shù) SysTick_Configuration描述 設置SysTiCkvoidSysTiCk_Configuration(void){/*配置HCLK時鐘做為SysTick時鐘源*/SysTiCk_CLKSourCeConfig(SysTiCk_CLKSourCe_HCLK_Div8);//系統(tǒng)時鐘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);}**函數(shù)名E*TI_Configuration*描述 配置E*TI線個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個個/voidE*TI_Configuration(void){/*將E*TI線4連接到PD4*/GPIO_E*TILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource4);/*配置E*TI線4上出現(xiàn)下降沿,則產(chǎn)生中斷*/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上出現(xiàn)下降沿產(chǎn)生中斷*/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);}中斷函數(shù):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功能描述:本例程實現(xiàn)外部中斷的輸入試驗,按下按鈕,指示燈閃爍一下#include<stm32f10*_lib.h> // STM32F10*LibraryDefinitions#include"STM32_Init.h"http://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);//等待外部晶振穩(wěn)定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穩(wěn)定while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);〃系統(tǒng)時鐘SYSCLK來自PLL輸出RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//切換時鐘后等待系統(tǒng)時鐘穩(wěn)定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; //下降沿觸發(fā)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); //搶占式優(yōu)先級別設置為無搶占優(yōu)先級NVIC_InitStructure.NVIC_IRQChannel=E*TI3_IRQChannel; //指定中斷源NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //指定響應優(yōu)先級別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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論