資源描述:
《實(shí)驗(yàn)二 按鍵中斷實(shí)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、實(shí)驗(yàn)二按鍵中斷實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康牧私庵袛嗟暮x二、實(shí)驗(yàn)內(nèi)容板子加電后,按動(dòng)板子上K1-K3按鍵,可控制對(duì)應(yīng)的LED1-LED3的亮滅,該實(shí)驗(yàn)學(xué)習(xí)了外部中斷(EXTI)程序的編制及控制流程。三、實(shí)驗(yàn)儀器、設(shè)備計(jì)算機(jī)、開(kāi)發(fā)板、keil軟件四、硬件設(shè)計(jì)在開(kāi)發(fā)板上V6、V7、V8分別與MCU的PB5、PD6、PD3相連,如下圖所示鍵盤部分如下圖所示:例程所用到的列掃描線:PC5,PC2,PC3。例程所用到的行掃描線(EXTI中斷線):PE2。五、實(shí)驗(yàn)要求和步驟開(kāi)發(fā)板上有3個(gè)藍(lán)色狀態(tài)指示燈V6(LED1),V7(LED2),V8(LED3),通過(guò)對(duì)應(yīng)
2、的按鍵K1-K3,控制LED的亮滅,將PE2引腳配置為外部中斷,當(dāng)其上出現(xiàn)下降沿時(shí)產(chǎn)生一個(gè)中斷,根據(jù)掃描PC5,PC2,PC3來(lái)判別是哪個(gè)按鍵按下。首先我們了解一下什么是外部中斷/事件控制器(EXTI)。外部中斷/事件控制器由19個(gè)產(chǎn)生事件/中斷要求的邊沿檢測(cè)器組成。每個(gè)輸入線可以獨(dú)立地配置輸入類型(脈沖或掛起)和對(duì)應(yīng)的觸發(fā)事件(上升沿或下降沿或者雙邊沿都觸發(fā))。每個(gè)輸入線都可以被獨(dú)立的屏蔽。掛起寄存器保持著狀態(tài)線的中斷要求。EXTI控制器的主要特性如下:每個(gè)中斷/事件都有獨(dú)立的觸發(fā)和屏蔽每個(gè)中斷線都有專用的狀態(tài)位支持多達(dá)19個(gè)中斷/
3、事件請(qǐng)求檢測(cè)脈沖寬度低于APB2時(shí)種寬度的外部信號(hào)如要產(chǎn)生中斷,中斷線必須事先配置好并被激活。這是根據(jù)需要的邊沿檢測(cè)通過(guò)設(shè)置2個(gè)觸發(fā)寄存器,和在中斷屏蔽寄存器的相應(yīng)位寫(xiě)“1”到來(lái)允許中斷請(qǐng)求。當(dāng)需要的邊沿在外部中斷線上發(fā)生時(shí),將產(chǎn)生一個(gè)中斷請(qǐng)求,對(duì)應(yīng)的掛起位也隨之被置1。通過(guò)寫(xiě)“1”到掛起寄存器,可以清除該中斷請(qǐng)求。為產(chǎn)生事件觸發(fā),事件連接線必須事先配置好并被激活。這是根據(jù)需要的邊沿檢測(cè)通過(guò)設(shè)置2個(gè)觸發(fā)寄存器,和在事件屏蔽寄存器的相應(yīng)位寫(xiě)“1”到來(lái)允許事件請(qǐng)求。當(dāng)需要的邊沿在事件連線上發(fā)生時(shí),將產(chǎn)生一個(gè)事件請(qǐng)求脈沖,對(duì)應(yīng)的掛起位不被置1
4、。通過(guò)在軟件中斷/事件寄存器寫(xiě)“1”,一個(gè)中斷/事件請(qǐng)求也可以通過(guò)軟件來(lái)產(chǎn)生。本次實(shí)驗(yàn)需要組件的工程文件文檔如下:USER--stm32f10x_it.c為中斷服務(wù)程序主程序,我們對(duì)主程序進(jìn)行一次詳細(xì)的注釋。//______________________主程序____________________________________________________________________intmain(void){unsignedchara=0,b=0,c=0;/*完成對(duì)系統(tǒng)時(shí)鐘的設(shè)置,例程中通過(guò)系統(tǒng)時(shí)鐘設(shè)置函數(shù),外接晶振采用8M
5、hz,經(jīng)過(guò)片內(nèi)頻率合成,9倍頻,設(shè)置為72MHz的時(shí)鐘。*/RCC_Configuration();/*嵌套向量中斷控制器說(shuō)明了EXTI2搶占優(yōu)先級(jí)級(jí)別0(最多1位),和子優(yōu)先級(jí)級(jí)別0(最多7位)*/NVIC_Configuration();/*對(duì)控制3個(gè)LED指示燈的IO口進(jìn)行了初始化,將3個(gè)端口配置為推挽上拉輸出,口線速度為50Mhz。將中斷線PE2配置為輸入模式。將鍵盤掃描列線PC5,PC2,PC3設(shè)置為推挽上拉輸出。在配置某個(gè)口線時(shí),首先應(yīng)對(duì)它所在的端口的時(shí)鐘進(jìn)行使能。否則無(wú)法配置成功,由于用到了端口B和端口D,C,D,因此要對(duì)這
6、4個(gè)端口的時(shí)鐘進(jìn)行使能,同時(shí)由于用到復(fù)用IO口功能用于配置外部中斷。因此還要使能AFIO(復(fù)用功能IO)時(shí)鐘。*/GPIO_Configuration();//用于配置AFIO外部中斷配置寄存器AFIO_EXTICR1,用于選擇EXTI2外部中斷的輸入源是PE2。GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);EXTI_InitStructure.EXTI_Line=EXTI_Line2;//PE2作為鍵盤的行線。檢測(cè)狀態(tài)EXTI_InitStructure.EXTI_M
7、ode=EXTI_Mode_Interrupt;//中斷模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿觸發(fā)EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);/*置3根鍵盤列掃描線為0,以便在按鍵按下時(shí)產(chǎn)生中斷GPIO_ResetBits(GPIOC,GPIO_Pin_2);GPIO_ResetBits(GPIOC,GPIO_Pin_3);GPIO_ResetBits(GPIOC
8、,GPIO_Pin_5);while(1){GPIO_ResetBits(GPIOC,GPIO_Pin_2);GPIO_ResetBits(GPIOC,GPIO_Pin_3);GPIO_Res