STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)_第1頁
STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)_第2頁
STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)_第3頁
STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)_第4頁
STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)涉及專有名詞較多,難免解釋不到位,若有錯誤還請指出,謝謝?。㎏EYUPPA034U2pAD-WKUP/USAMTjCKEY2KEY&KEY!LEDOPB5菇PE5;TRACED2/FSMC_A21PB5/12CSIvIBAI/SPI3MOSI/I2S3_SD4FE5丘PlVCC1S亟JDS1LED1K2+510-I(ED1510、掃描思路是在函數(shù)中通過死循環(huán)來掃描端口電平狀態(tài)檢測,以此判斷按鍵是否按下。實現(xiàn)較為簡單。1.初始化(注意C語言中變量聲明需放在函數(shù)開頭)以下是初始化P端口(燈)的代碼,每一條語句的含義在我另一篇博客里GPI

2、O_IGPIOGPIOI2GPIO:InitTypeGPIOI1式RCC:AP2PeriClockCmd(CC:APB2Pe:GPIOGPIO:Init1.GPIO:PGPIOPGPIO:Init1.GPIO:MGPIOMode:OutPPGPIO:Init1.GPIO:SpGPIO:Sp0MHzGPIO:SeGPIOGPIOP先熄燈GPIOInit(GPIOGPIOI1)式以下是初始化P3端口(按鍵)的代碼GPIO:InitTypeGPIOI2式RCC:APB2PeripClockCmd(RCC:APB2Pe:GPIOGPIOI2.GPIOPGPIOP設置GPIO端口號為GPIOI2.GPI

3、OMGPIOM設置端口模式為輸入上拉設置為輸入端口時不需要指定GPIOS參數(shù)輸入上拉與輸入下拉的區(qū)別:輸入上拉GPIOM_端口與CCS過一個電阻串連,因此沒有輸入或輸入高電平時端口為高電平,輸入低電平時端口為低電平輸入下拉GPIOM:端口與G通過一個電阻串連,因此沒有輸入或輸入低電平時端口為低電平,輸入高電平時端口為高電平從硬件圖上得知按鍵與G相連,如果端口設置為輸入上拉,那么松開按鍵時端口為高電平,按下按鍵時端口為低電平,可以區(qū)分兩種狀態(tài)如果端口設置為輸入下拉,那么無論是按下還是松開按鍵時端口總為低電平,無法區(qū)分兩種狀態(tài)類似地,如果按鍵與CG相連,則端口需要設置為輸入下拉才能區(qū)分按下松開兩種

4、狀態(tài)2.掃描讀取P3端口的狀態(tài):GPIOIGPIOGPIOP3返回值為S則端口為高電位,返回值為S則端口為低電位在函數(shù)中放入以下死循環(huán)代碼以實現(xiàn)掃描P3端口并點燈的功能熄燈I負極連接,正極連接,高電平熄燈)否則亮燈0);些開發(fā)板例程當中提供了函數(shù),需要通過初始化后才可使用若無現(xiàn)成函數(shù),可通過一定次數(shù)的循環(huán)來代替3.例程代碼如下2itPtBe2ir.tGisPp(IhGO,P先熄燈in_3;_50MHz;00,;Pin_3二、中斷0.相關概念中斷:程序運行過程中,系統(tǒng)外部、系統(tǒng)內部或者現(xiàn)行程序本身若出現(xiàn)緊急事件,處理機立即中止現(xiàn)行程序的運行,自動轉入相應的處理程序中斷服務程序)待處理完后,再返回

5、原來的程序運行簡而言之就是觸發(fā)某一事件可以使得跳轉執(zhí)行該事件的處理程序,而按鍵按下或放開(口電平改變)則可作為一個外部中斷,通過編寫這一事件的處理程序從而達到改變燈亮滅狀態(tài)的目的(這里提到的事件并不是32中的專有名詞事件”而是泛指發(fā)生了某一件事)使用掃描方式獲得按鍵輸入的思路如下:主函數(shù)()初始化死循環(huán)如果按鍵按下否則而使用中斷獲得按鍵輸入的思路如下主函數(shù)()初始化其它操作其它操作中斷處理函數(shù)()如果(按鍵按下否則對比可知使用掃描方式將使得芯片無法(難以)處理其它事務NVIC:全名為內嵌向量中斷控制器”主要用來控制芯片中各個中斷的優(yōu)先級,在很多地方都會使用(串口通信、信等涉及到實時處理的功能都

6、會與中斷有關)EXTI(不是EXIT):全名為外部中斷事件控制器”可以實現(xiàn)輸入信號的上升沿檢測和下降沿的檢測1.初始化(注意C語言中變量聲明需放在函數(shù)開頭)1.1NVIC通信、定時器、I(通NVIC_InitTypeDeNVICI定義初始化結構體NVIC_roupCNV設置整個系統(tǒng)的中斷優(yōu)先級分組2NVIC_I.NVIC_IQChaEXTI3_IR設置初始化哪個中斷NVIC_I.NVIC_IQCha設置中斷搶占優(yōu)先級2NVIC_I.NVIC_IQCha設置中斷響應優(yōu)先級(子優(yōu)先級)NVIC_I.NVIC_IQChannelCmd=ENAE中斷使能(啟動)NVIC_Init(&NVIC_

7、I初始化需要用到的初始化語句如下:中斷優(yōu)先級分組、搶占優(yōu)先級和子優(yōu)先級的關系:T系列的芯片當中一般會有很多的中斷,而當多個中斷同時發(fā)生時就需要一個調度機制來控制它們的執(zhí)行順序,的概念。優(yōu)先級遵循以下幾點:1.優(yōu)先級的數(shù)字越小優(yōu)先級越高2.搶占優(yōu)先級高的中斷會先執(zhí)行,它也可以打斷搶占優(yōu)先級低的中斷當搶占優(yōu)先級相同時,響應優(yōu)先級高的中斷會先執(zhí)行,但它不可以打斷響應優(yōu)先級低的中斷4當.兩個中斷的搶占優(yōu)先級和響應優(yōu)先級都相同時,先產(chǎn)生的中斷先執(zhí)行(按照時間順序)因此有了中斷的優(yōu)先級舉個例子,現(xiàn)在有三個中斷:中斷1:搶占優(yōu)先級為2,響應優(yōu)先級為1中斷2:搶占優(yōu)先級為3,響應優(yōu)先級為0中斷3:搶占優(yōu)先級為

8、2,響應優(yōu)先級為0則3個中斷的優(yōu)先級順序是中斷3中斷1中斷2,同時中斷1、3可以打斷中斷2,中斷3不能打斷中斷1而兩類優(yōu)先級可以設置成哪些值呢?這取決于整個系統(tǒng)的中斷優(yōu)先級分組。通過NVIC可以設置整個系統(tǒng)的中斷優(yōu)先級分組,其參數(shù)可以是NVICtNVICNVICtNVIC之一。具體關系如下:NVIC:位搶占優(yōu)先級(無效)位響應優(yōu)先級(1NVIC:1位搶占優(yōu)先級(1)位響應優(yōu)先級(7NVIC:2位搶占優(yōu)先級2(3位響應優(yōu)先級(3NVIC:位搶占優(yōu)先級(7位響應優(yōu)先級(1)NVIC:位搶占優(yōu)先級(1位響應優(yōu)先級(無效)、yNGVIrCo1rit、yGroup_2例如中斷分組設置為3,則所有中斷的搶

9、占優(yōu)先級可以被設置為0,7響應優(yōu)先級可以被設置為0、1需要注意的是如果程序中用到了二次封裝的一些庫(比如開發(fā)板例程中廠商為初學者寫的串口庫等),貝NVIC已經(jīng)被調用過了,此時再次修改可能會帶來其它問題1.2EXTI可能CEXTI_ITEXTII定義初始化級結級構體EXTI_EXTI_EXTI_EXTI_I.EXTII.EXTI_MoI.EXTITI.EXTIEXTIEXTIEXTITCENE;設置初始化哪級條級中斷級事件線I設置為產(chǎn)生中斷(EXTI設置為下降沿觸發(fā)使能EV產(chǎn)生事件)需要用到的初始化語句如下:EXTI_Init(&EXTI_I);/初始化中斷/事件的區(qū)別:中斷產(chǎn)生后經(jīng)由N

10、VIC交給MCU進行處理(軟件層面)事件最終作為一個脈沖信號直接觸發(fā)其它硬件(硬件層面)附一張EXTI的框圖便于理解,藍色是中斷,紅色是事件PCLK2外設模塊接口19川9Jl9掛起請求寄存器軟件中斷/事件寄存器上升沿寄存器下降沿選擇至N¥IC中斷控制器n19extI、Nvic與GPIO的對應關系:如圖所示GPIOEXTILineNVICIRQChannel中斷處理函數(shù)PA0-PG0EXTIOEXTIOJRQnEXTIOJRQHandlerf)PA1-PG1EX工EXTIIJRQnEXTIlIRQHandler()PA2-PG2EXTI2EXTI2IRQnEXTI2IRQHandler

11、()PA3-PG3EXTI3EXTI3JRQnEXTI3IRQHandler()PA4-PG4EXTI4EXTI4JRQnEXTI4JRQHandler()PA5-PG5EXTI5PA5-PG6EXTI5PA7-PG7EXTI7EXTI9_5JRQnEXTI9_5JRQHandler()PA8-PG8EXTI8PA9PG9EXTI9PA10-PG10EXTI10PA11-PG11EXTI11PA12-PG12EXTI12EXTI15J0JRQnEXTI15_10JRQHandler()上升/下降沿PG13EXTI13低電平跳電平為上升沿(涓電平跳到低電平為卜降沿DA1IDE£fYTI

12、1R輸入線1.3GPIO與掃描方式的初始化代碼相同GPIO_InitTypeDefGPIO_Init1,GPIO_Init2GPIO_APILineCo2Periphnfig(GPIO_PortSourceGPIOEC_APB2Periph,GPIO_PinSo_AFIO,ENABurce3AP2PeriC_APB2Periph_GPIOB,ENAGPIO_It1.GPIO_PiGPIOPGPIO_It1.GPIO_GPIO_Out_PP;GPIO_It1.GPIO_GPIOGPIO_It(GPIO&GPIO_Init1);GPIO_GPIOGPIOP先熄燈AP2PeriC_APB2P

13、eriph_GPIOE,ENAGPIO_It2.GPIO_PiGPIOP3GPIO_It2.GPIO_GPIO_IPU;GPIO_It(GPIOE&GPIO_Init2);1.4其它目前不明確這兩條語句的作用GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);P2PP2P開啟端口復用O涉及到GPIO口做外部中斷時都需要這一條語句2.中斷處理函數(shù)函數(shù)名與中斷/事件線有著對應關系,可參照上一張表I3IGPIOIGPIOGPIOP3GPIOGPIOGPIOPGPIO_ResetBits(GPIOB,GPIO_Pin_5);EXT

14、I_ClearITPendingBit(EXTI_Line3);最后的IIP用于清除中斷標志位,避免對之后的中斷造成影響3.例程代碼如下:GPIOIII1IGPIOIII1I1GPIOInit2;IIGPIO_EXTILineCIIonfig(GPIO_PortSurceGPIOE,GPIO_PinSource3RCC_APB2PeripPB2Periph_AFIO,ENABLII.IIXTI3_IRII.IIQChannelPronPriority=0x02;II.IIbPriority=0x02;ne3I_TAPB2PeriphClockCmd(RCC_APB2Periph_GPIOGPIO_It1.GPIO_PiGPIOPGPIO_It1.GPIO_GPIOde_Out_PP;GPIO_It1.GPIO_GPIOGPIO_It(GPIO&GPIO_Init1)GPIO_GPIOGPIOP先熄燈AP2PeriRCC_AP2Perih_GPIOGPIO_It2.GPIO_PiGPIOP_3;GPIO_Init2.GPIO_Mode=GPI

溫馨提示

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

評論

0/150

提交評論