-固件庫(kù)點(diǎn)LED GPIO輸入-按鍵檢測(cè)_第1頁(yè)
-固件庫(kù)點(diǎn)LED GPIO輸入-按鍵檢測(cè)_第2頁(yè)
-固件庫(kù)點(diǎn)LED GPIO輸入-按鍵檢測(cè)_第3頁(yè)
-固件庫(kù)點(diǎn)LED GPIO輸入-按鍵檢測(cè)_第4頁(yè)
-固件庫(kù)點(diǎn)LED GPIO輸入-按鍵檢測(cè)_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

第第頁(yè)—固件庫(kù)點(diǎn)LEDGPIO輸入——按鍵檢測(cè)GPIO輸出—固件庫(kù)點(diǎn)亮LED燈點(diǎn)亮led燈的原理:LED的陽(yáng)極接高電平,陰極接IO口。要LED燈亮就要形成閉合回路,IO口接入低電平就能形成閉合回路,點(diǎn)亮LED

一個(gè)led驅(qū)動(dòng)的三大功能:LED亮LED滅LED翻轉(zhuǎn)新建led.cled.h兩個(gè)文件存放GPIO初始化函數(shù)(加入工程后記得添加路徑!?。。┚帉戭^文件格式:(這樣寫是為了防止重復(fù)定義)

#ifndef__LED__H#define__LED__H#endif

在頭文件中寫宏定義宏定義是為了方便移植和方便自己有一些很繁瑣的變量不用多次去寫不易出錯(cuò)

如何尋找固件庫(kù)的函數(shù):首先需要用到什么樣的函數(shù)就去哪里找,例如用到RCC就去RCC的頭文件,用到GPIO就去GPIO的頭文件在頭文件的函數(shù)聲明,根據(jù)函數(shù)名找到對(duì)應(yīng)的函數(shù)跳轉(zhuǎn)到該函數(shù)查看函數(shù)的作用自定義GPIO初始化函數(shù):在這過(guò)程中我們需要用到固件庫(kù)的voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)函數(shù)這個(gè)函數(shù)的功能是:根據(jù)GPIO_InitStruct中的指定參數(shù)初始化GPIO如何實(shí)現(xiàn)GPIO_Init這個(gè)函數(shù)?一開(kāi)始尋找到對(duì)應(yīng)的引腳,再用結(jié)構(gòu)體指針指向要操作的寄存器,最后賦值就可以實(shí)現(xiàn)GPIO的初始化

voidLED_GPIO_Config(void){//定義一個(gè)GPIO_InitTypeDe類型的變量GPIO_InitTypeDefGPIO_InitStruct;

//使能外部時(shí)鐘RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);

//初始化之后引腳默認(rèn)為低電平,所以初始化的時(shí)候把電平拉高GPIO_SetBits(LEDR_GPIO_PORT,LEDR_GPIO_PIN);GPIO_SetBits(LEDG_GPIO_PORT,LEDG_GPIO_PIN);GPIO_SetBits(LEDB_GPIO_PORT,LEDB_GPIO_PIN);//初始化GPIOGPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;GPIO_Init(LEDR_GPIO_PORT,//調(diào)用函數(shù)GPIO_InitStruct.GPIO_Pin=GPIO_Pin_11;GPIO_Init(LEDG_GPIO_PORT,

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12;GPIO_Init(LEDB_GPIO_PORT,

}

最后回到main函數(shù)控制GPIO引腳的高低電平,從而實(shí)現(xiàn)LED的亮、滅和翻轉(zhuǎn)??梢允褂霉碳?kù)的函數(shù),也可以操作寄存器。用固件庫(kù)會(huì)用到以下函數(shù):voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)//置位voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);//復(fù)位voidGPIO_ToggleBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);//翻轉(zhuǎn)

操作寄存器:

#definedigitalHi(p,i){p->BSRRH=i;}#definedigitalLo(p,i){p->BSRRL=i;}#definedigitalToggle(p,i){p->ODR^=i;}

GPIO輸入—按鍵檢測(cè)按鍵是否按下:按鍵的另一端接3.3的電源,若沒(méi)有按下,按鍵所在的電路是不導(dǎo)通的,若按下,按鍵所在電路導(dǎo)通。檢測(cè)按鍵接的引腳的高低電平,就可以判斷按鍵是否按下。與上述點(diǎn)LED燈一樣,新建KEY.cKEY.h存放初始化GPIO的函數(shù)還要寫一個(gè)檢測(cè)按鍵是否按下的函數(shù)需要用到uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)//讀取指定引腳的電平狀態(tài)//按鍵一直按著不松開(kāi),等到松開(kāi)后才返回值,就是一直按著LED燈的狀態(tài)不會(huì)改變

uint8_tKEY_Scan(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==1){while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==1);return1;}elsereturn0;}

其實(shí)也可以不寫這個(gè)函數(shù),在main函數(shù)中直接檢測(cè)

只要檢測(cè)到GPIO引腳是高電平,即按鍵是按下?tīng)顟B(tài),LED就翻轉(zhuǎn)if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==KEY_ON){GPIO_ToggleBits(GPIOH,GPIO_Pin_11);delay(100);}

GPIO—位帶操作STM32中必須通過(guò)訪問(wèn)位帶別名區(qū)才能實(shí)現(xiàn)位帶操作,位帶區(qū)分為外設(shè)位帶區(qū)和SARM位帶區(qū)。ABH1和APB1/2這幾條總線上的寄存器才有位帶別名區(qū)。位帶區(qū)要經(jīng)過(guò)膨脹才能變成位帶別名區(qū),一個(gè)位膨脹變成4個(gè)字節(jié),這樣

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論