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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文以USARTI為例,表達(dá)串口中斷的編程過程。1、先來講述一下在應(yīng)用串口中斷時(shí)涉及到的一些庫文件。首先對于STM32外設(shè)庫文件的應(yīng)用編程,misc.c和stm32f10*_rcc.c是肯定要添加到。接下來就是我們要用到的相關(guān)外設(shè)了。毫無疑問,串口文件stm32f10*_usart.c是必須的。串口通信是對通用GPIO端口引腳的功能復(fù)用,所以還需要stm32f10*_gpio.c文件。另外,因?yàn)橛兄袛嗟漠a(chǎn)生,所以中斷文件stm32f10*_it.c也是必要的,當(dāng)然這個(gè)文件一般和main.C放在一個(gè)文件夾下(一般習(xí)慣為User文件夾),因?yàn)槲覀兊闹袛囗憫?yīng)函數(shù)是要在里面自己編寫的。當(dāng)然還有其他的根本必須文件如系統(tǒng)配置文件等在這地方就不說了,這個(gè)是創(chuàng)立一個(gè)工程應(yīng)該知道的。2、初始化對于串口通信的初始化,不僅僅只是對串口的初始化(這個(gè)地方是比擬煩人的,不像別的芯片那樣簡潔明了)。首先時(shí)鐘使能配置。STM32部的時(shí)鐘有很多,感興趣的自己看看參考手冊。此處以USARTI為例說明。有USARTI時(shí)鐘、GPIOA時(shí)鐘、GPIO復(fù)用(AFIO)時(shí)鐘。由于此處USARTI和GPIOA、AFIO均在APB2上,所以可以一次配置完成。如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);其次中斷配置。主要有優(yōu)先級組設(shè)定、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復(fù)用功能配置。一般情況下我們使用原始的外設(shè)和GPIO端口引腳的映射關(guān)系,如果要改變其映射的話,請另外查看參考手冊上關(guān)于GPIO重映射局部。對于GPIO的復(fù)用,其引腳的輸入與輸出模式都有要求,在參考手冊上有詳細(xì)說明。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;//校驗(yàn)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)過以上不走之后呢,我們就可以進(jìn)展數(shù)據(jù)的收發(fā)了。3、發(fā)送數(shù)據(jù)使用函數(shù)USART_SendData(USART1,Chardata),一次只能發(fā)送一個(gè)字符。當(dāng)然我們可以用如下函數(shù)發(fā)送字符串。voidUSARTI_Puts(Char*Str){while(*str){USART_SendData(USART1,*str++);//發(fā)送一個(gè)字符While(USART_GetFlagStatus(USART1,USART_FLAG_T*E)==RESET);//等待發(fā)送完畢}}當(dāng)然我們也可以循環(huán)發(fā)送字符串?dāng)?shù)組for(i=0;T*Buf1!='\0';i++)//T*Buf1為定義好的字符串?dāng)?shù)組(USART_SendData(USART2,T*Buf1);while(USART_GetFIagStatUs(USART2,USART_FLAG_TC)==RESET);}4、接收數(shù)據(jù)由于我們使用的是承受中斷所以當(dāng)有數(shù)據(jù)需要接收時(shí),會(huì)執(zhí)相應(yīng)的中斷函數(shù)。此處我們USARTI的中斷函數(shù)在stm32f10*_it.c文件中。找到函數(shù)voidUSART1_IRQHandler(void)如果沒有的話就自己加上吧別忘了頭文件中需要聲明一下。當(dāng)然你也可以在其他文件中寫下該中斷函數(shù)當(dāng)產(chǎn)生中斷進(jìn)入該函數(shù)之后我們就可以進(jìn)展自己的操作了。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++]);}〃這個(gè)地方那個(gè)之所以把這個(gè)寫出來主要是想說發(fā)送中斷和承受中斷其實(shí)是共用一個(gè)〃中斷函數(shù)的,到底是那個(gè)中斷發(fā)生了呢,這就需要我們讀取中斷狀態(tài)標(biāo)志來識(shí)別了。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ù)進(jìn)展別的操作之前為了防止數(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)//這個(gè)地方和特別,我們知道一般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)//等待中斷{}}當(dāng)然你也可以在想足()中添加一些發(fā)送指令之類的東西。以上容為個(gè)人總結(jié),請注明出處。假設(shè)有錯(cuò)誤,本人概不負(fù)任何責(zé)任。STM32外部中斷配NVIC_Configuration函數(shù)實(shí)現(xiàn)配置嵌套向量中斷中斷優(yōu)先級并使能中斷。其中的NVIJPriorityGroupConfig函數(shù)配置中斷優(yōu)先級的組織方式,STM32的嵌套向量中斷控制器可以配置16個(gè)可編程的優(yōu)先等級,使用了4位表示中斷優(yōu)先級〔2的4此方就是16〕,16個(gè)可編程的優(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);設(shè)置中斷優(yōu)先級:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//設(shè)置中斷優(yōu)先級初始化外部中斷:/*允許E*TI4中斷*/NVIC_InitStructure.NVIC_IRQChannel=E*TI4_IRQChannel;//中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=PreemptionPriorityValue;//占先優(yōu)先級NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//響應(yīng)〔次級〕優(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個(gè)針腳上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描述 配置各個(gè)中斷存放器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);//設(shè)置中斷優(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的第一個(gè)管角為浮動(dòng)輸入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);/*配置GPIOB的第9個(gè)管腳為浮動(dòng)輸入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);}函數(shù) SysTick_Configuration描述 設(shè)置SysTiCkvoidSysTiCk_Configuration(void){/*配置HCLK時(shí)鐘做為SysTick時(shí)鐘源*/SysTiCk_CLKSourCeConfig(SysTiCk_CLKSourCe_HCLK_Div8);//系統(tǒng)時(shí)鐘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線個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)/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線路掛起位}注:時(shí)鐘設(shè)置的時(shí)候最好加上這句RCCRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO時(shí)鐘**************************************************************例程名稱:外部中斷實(shí)驗(yàn)實(shí)驗(yàn)硬件:DP-miniSTM32硬件連接:指示燈連接PA1按鈕連接PA3功能描述:本例程實(shí)現(xiàn)外部中斷的輸入試驗(yà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();//如果外部晶振啟動(dòng)成功,則進(jìn)展下一步操作if(HSEStartUpStatus==SUCCESS){〃設(shè)置HCLK〔AHB時(shí)鐘〕=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);〃啟動(dòng)PLLRCC_PLLCmd(ENABLE);〃等待PLL穩(wěn)定while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);〃系統(tǒng)時(shí)鐘SYSCLK來自PLL輸出RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//切換時(shí)鐘后等待系統(tǒng)時(shí)鐘穩(wěn)定while(RCC_GetSYSCLKSource()!=0*08);}/*RCCsystemreset(fordebugpurpose)*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//給GPIOA和重映射提供時(shí)鐘,注意:一定要設(shè)置RCC_APB2Periph_AFIO}*名稱:GPIO_Configuration()voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;/*設(shè)置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);/*設(shè)置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)先級別設(shè)置為無搶占優(yōu)先級NVIC_InitStructure.NVIC_IRQChannel=E*TI3_IRQChannel; //指定中斷源NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //指定響應(yīng)優(yōu)先級別1NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能外部中斷通道3NVIC_Init(&NVIC_InitStructure);}intmain(void){RCC_Configuration();//配置時(shí)鐘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); //去除中斷標(biāo)志〔必須〕E*TI_ClearITPendingBit(E*TI_Line3);//以上兩條語句作用一樣}}在使用E*TI的時(shí)候,因?yàn)闆]有開啟時(shí)鐘沒有開啟RCC_A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論