STM32中使用GPIO的總結超強_第1頁
STM32中使用GPIO的總結超強_第2頁
STM32中使用GPIO的總結超強_第3頁
STM32中使用GPIO的總結超強_第4頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、STM32 GPIO使用操作步驟:使能 GPIO對應的外設時鐘例如: / 使能 GPIOA、GPIOB、GPIOC對應的外設時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);聲明一個 GPIO_InitStructure結構體例如:GPIO_InitTypeDef GPIO_InitStructure;選擇待設置的 GPIO管腳例如: /*選擇待設置的 GPIO7、8、9 管腳位 ,中間加“ | ”符號*/GPIO_InitStructure.GP

2、IO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;4. 設置選中 GPIO管腳的速率例如: /*設置選中 GPIO管腳的速率為最高速率2MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;最/高速率 2MHzGPIO5. 設置選中管腳的模式 */設置選中 GPIO管腳的模式為開漏輸出模式/*例如:/ 開漏輸出模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIOX中指定的參數(shù)初始化外設6. 根據(jù) GPIO_InitStructureGPIOC

3、 */GPIO_InitStructure中指定的參數(shù)初始化外設根據(jù)例如:/*1/16GPIO_Init(GPIOC, &GPIO_InitStructure);7.其他應用例: 將端口 GPIOA的10、15 腳置 1(高電平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);例:將端口 GPIOA的10、15 腳置 0(低電平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);GPIO寄存器:寄存器描述端口配置低寄存器CRL端口配置高寄存器CRH端口輸入數(shù)據(jù)寄存器IDR端口輸出數(shù)據(jù)寄存器OD

4、R端口位設置 BSRR / 復位寄存器端口位復位寄存器BRR端口配置鎖定寄存器LCKR事件控制寄存器EVCR復用重映射和調試MAPRI/O配置寄存器EXTICR 外部中斷線路 0-15 配置寄存器2/16GPIO庫函數(shù):函數(shù)名描述GPIO_DeInit將外設 GPIOx 寄存器重設為缺省值GPIO_AFIODeInit 將復用功能(重映射事件控制和EXTI設置)重設為缺省值GPIO_Init根據(jù) GPIO_InitStruct中指定的參數(shù)初始化外設GPIOx寄存器GPIO_StructInit把 GPIO_InitStruct中的每一個參數(shù)按缺省值填入GPIO_ReadInputDataBit

5、 讀取指定端口管腳的輸入GPIO_ReadInputData讀取指定的 GPIO端口輸入GPIO_ReadOutputDataBit 讀取指定端口管腳的輸出GPIO_ReadOutputData 讀取指定的 GPIO端口輸出GPIO_SetBits設置指定的數(shù)據(jù)端口位GPIO_ResetBits清除指定的數(shù)據(jù)端口位GPIO_WriteBit設置或者清除指定的數(shù)據(jù)端口位GPIO_Write向指定 GPIO數(shù)據(jù)端口寫入數(shù)據(jù)GPIO_PinLockConfig鎖定 GPIO管腳設置寄存器GPIO_EventOutputConfig 選擇 GPIO管腳用作事件輸出GPIO_EventOutputCmd

6、使能或者失能事件輸出GPIO_PinRemapConfig改變指定管腳的映射GPIO_EXTILineConfig 選擇 GPIO管腳用作外部中斷線路庫函數(shù):函數(shù) GPIO_DeInit功能描述:將外設GPIOx寄存器重設為缺省值3/16例:GPIO_DeInit(GPIOA);函數(shù) GPIO_AFIODeInit功能描述:將復用功能(重映射事件控制和EXTI設置)重設為缺省值例:GPIO_AFIODeInit();函數(shù) GPIO_Init功能描述:根據(jù) GPIO_InitStruct中指定的參數(shù)初始化外設GPIOx寄存器例:GPIO_InitTypeDef GPIO_InitStructur

7、e;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitTypeDef structureGPIO_InitTypeDef定義于文件“ stm32f10x_gpio.h”:typedef struct4/16u16 GPIO_Pin;GPIOSpeed_Typ

8、eDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;GPIO_InitTypeDef;GPIO_Pin該參數(shù)選擇待設置的GPIO管腳,使用操作符“ | ”可以一次選中多個管腳。可以使用下表中的任意組合。GPIO_Pin_None:無管腳被選中選中管腳 x(0-15)GPIO_Pin_x:GPIO_Pin_All:選中全部管腳GPIO_Speed用以設置選中管腳的速率。GPIO_Speed:GPIO_Speed_10MHz: 最高輸出速率 10MHzGPIO_Speed_2MHz:最高輸出速率2MHzGPIO_Speed_50MHz: 最高輸出速率 50MHzG

9、PIO_ModeGPIO_Mode:用以設置選中管腳的工作狀態(tài)。模擬輸入GPIO_Mode_AIN:5/16GPIO_Mode_IN_FLOATING: 浮空輸入GPIO_Mode_IPD:下拉輸入上拉輸入:GPIO_Mode_IPU開漏輸出GPIO_Mode_Out_OD:GPIO_Mode_Out_PP :推挽輸出 GPIO_Mode_AF_OD:復用開漏輸出GPIO_Mode_AF_PP:復用推挽輸出函數(shù) GPIO_StructInit功能描述:把 GPIO_InitStruct中的每一個參數(shù)按缺省值填入例:GPIO_InitTypeDef GPIO_InitStructure;GPIO

10、_StructInit(&GPIO_InitStructure);GPIO_InitStruct:GPIO_Pin:GPIO_Pin_AllGPIO_Speed:GPIO_Speed_2MHzGPIO_Mode:GPIO_Mode_IN_FLOATING函數(shù) GPIO_ReadInputDataBit功能描述:讀取指定端口管腳的輸入例:6/16u8 ReadValue;ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);函數(shù) GPIO_ReadInputData功能描述:讀取指定的GPIO端口輸入例:u16 ReadValue;Re

11、adValue = GPIO_ReadInputData(GPIOC);函數(shù) GPIO_ReadOutputDataBit功能描述:讀取指定端口管腳的輸出例:u8 ReadValue;ReadValue = GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_7);函數(shù) GPIO_ReadOutputData功能描述:讀取指定的GPIO端口輸出例:u16 ReadValue;ReadValue = GPIO_ReadOutputData(GPIOC);7/16函數(shù) GPIO_SetBits功能描述:置位指定的數(shù)據(jù)端口位例: 將端口 GPIOA的10、15 腳置 1(高

12、電平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);函數(shù) GPIO_ResetBits功能描述:清除指定的數(shù)據(jù)端口位例:將端口 GPIOA的10、15 腳置 0(低電平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);函數(shù) GPIO_WriteBit功能描述:設置或者清除指定的數(shù)據(jù)端口位例:GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);函數(shù) GPIO_Write功能描述:向指定GPIO數(shù)據(jù)端口寫入數(shù)據(jù)例:GPIO_Write(GPIOA, 0x1101);8

13、/16函數(shù) GPIO_PinLockConfig功能描述:鎖定GPIO管腳設置寄存器例:GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);函數(shù) GPIO_EventOutputConfig功能描述:選擇GPIO管腳用作事件輸出例:GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);GPIO_PortSourceGPIO_PortSource用以選擇用作事件輸出的GPIO端口。函數(shù) GPIO_EventOutputCmd功能描述:使能或者失能事件輸出例:GPIO_Event

14、OutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);GPIO_EventOutputCmd(ENABLE);函數(shù) GPIO_PinRemapConfig9/16功能描述:改變指定管腳的映射例:GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);一 GPIO概述1、共有 8 種模式,可以通過編程選擇:1. 浮空輸入2. 帶上拉輸入3. 帶下拉輸入4. 模擬輸入5. 開漏輸出 (此模式可實現(xiàn) hotpower 說的真雙向 IO)6. 推挽輸出7. 復用功能的推挽輸出8. 復用功能的開漏輸出模式 7 和模式 8

15、 需根據(jù)具體的復用功能決定。2、專門的寄存器 (GPIOx_BSRR和 GPIOx_BRR)實現(xiàn)對 GPIO口的原子操作,即回避了設置或清除I/O 端口時的“讀 -修改 -寫”操作,使得設置或清除 I/O 端口的操作不會被中斷處理打斷而造成誤動作。3、每個 GPIO口都可以作為外部中斷的輸入,便于系統(tǒng)靈活設計。10/164、I/O 口的輸出模式下,有 3 種輸出速度可選 (2MHz、10MHz 和 50MHz),這有利于噪聲控制。 這個速度是指 I/O 口驅動電路的響應速度而不是輸出信號的速度,輸出信號的速度與程序有關(芯片內部在 I/O 口的輸出部分安排了多個響應速度不同的輸出驅動電路, 用

16、戶可以根據(jù)自己的需要選擇合適的驅動電路) 。通過選擇速度來選擇不同的輸出驅動模塊,達到最佳的噪聲控制和降低功耗的目的。高頻的驅動電路,噪聲也高,當不需要高的輸出頻率時,請選用低頻驅動電路,這樣非常有利于提高系統(tǒng)的EMI 性能。當然如果要輸出較高頻率的信號,但卻選用了較低頻率的驅動模塊,很可能會得到失真的輸出信號。4.1 各種借口的措施:對于串口,假如最大波特率只需115.2k,那么用的 GPIO的引腳速度就夠了,既省電也噪聲小。對于 I 接口,假如使用400k 波特率,若想把余量留大些,那么用的GPIO的引腳速度或許不夠,這時可以選用的GPIO引腳速度。對于 SPI接口,假如使用或波特率,用的

17、GPIO的引腳速度顯然不夠了,需要選用的GPIO的引腳速度。4.2 GPIO口設為輸入時,輸出驅動電路與端口是斷開,所以輸出速度配置無意義。4.3 在復位期間和剛復位后,復用功能未開啟,I/O 端口被配置成浮空輸入模式。4.4 所有端口都有外部中斷能力。為了使用外部中斷線,端口必須配置成輸入模式。4.5 GPIO口的配置具有上鎖功能,當配置好GPIO口后,可以通過程序鎖住配置組合,直到下次芯片復位才能解鎖。5、所有 I/O 口兼容 CMOS和 TTL,多數(shù) I/O 口兼容 5V 電平。11/166、大電流驅動能力:GPIO口在高低電平分別為0.4V 和 VDD-0.4V 時,可以提供或吸收 8

18、mA 電流;如果把輸入輸出電平分別放寬到1.3V 和VDD-1.3V 時,可以提供或吸收 20mA 電流。7、具有獨立的喚醒I/O 口。8.很多 I/O 口的復用功能可以重新映射。9.GPIO口的配置具有上鎖功能,當配置好 GPIO口后,可以通過程序鎖住配置組合, 直到下次芯片復位才能解鎖。 此功能非常有利于在程序跑飛的情況下保護系統(tǒng)中其他的設備, 不會因為某些 I/O 口的配置被改變而損壞如一個輸入口變成輸出口并輸出電流。二推挽結構一般是指兩個三極管分別受兩互補信號的控制 ,總是在一個三極管導通的時候另一個截止 .要實現(xiàn)線與需要用 OC(open collector)門電路 . 如果輸出級的

19、有兩個三極管,始終處于一個導通、一個截止的狀態(tài),也就是兩個三級管推挽相連, 這樣的電路結構稱為推拉式電路或圖騰柱(Totem- pole)輸出電路(可惜,圖無法貼上)。當輸出低電平時,也就是下級負載門輸入低電平時, 輸出端的電流將是下級門灌入 T4;當輸出高電平時, 也就是下級負載門輸入高電平時, 輸出端的電流將是下級門從本級電源經3、D1 拉出。這樣一來,輸出高低電平時,T3 一路和 T4 一路將交替工作,從而減低了功耗, 提高了每個管的承受能力。又由于不論走哪一路,管子導通電阻都很小,使RC常數(shù)很小,轉變速度很快。因此,推拉式輸出級既提高電路的負載能力,又提高開關速度。供你參考。推挽電路是

20、兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中 ,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關管每次只有一個導通,所以導通損耗小效率高。輸出既可以向負載灌電流,也可以從負載抽取電流12/16三開漏電路在電路設計時我們常常遇到開漏 (open drain)和開集(open collector)的概念。所謂開漏電路概念中提到的“漏”就是指MOSFET的漏極。同理,開集電路中的“集”就是指三極管的集電極。開漏電路就是指以 MOSFET的漏極為輸出的電路。 一般的用法是會在漏極外部的電路添加上拉電阻。完整的開漏電路應該由開漏器件和開漏上拉電阻組成。組成開漏形式的電路有以下幾

21、個特點:1. 利用 外部電路的驅動能力,減少 IC內部的驅動。當 IC內部 MOSFET導通時,驅動電流是從外部的VCC流經 R pull-up ,MOSFET到 GND。IC內部僅需很下的柵極驅動電流。如1。2. 可以將多個開漏輸出的 Pin,連接到一條線上。 形成 “與邏輯” 關系。如圖 1,當 PIN_A、PIN_B、PIN_C任意一個變低后,開漏線上的邏輯就為 0 了。這也是 I,SMBus等總線判斷總線占用狀態(tài)的原理。3. 可以利用改變上拉電源的電壓,改變傳輸電平。如圖2, IC的邏輯電平由電源 Vcc1決定,而輸出高電平則由Vcc2決定。這樣我們就可以用低電平邏輯控制輸出高電平邏輯

22、了。4. 開漏 Pin 不連接外部的上拉電阻,則只能輸出低電平 (因此對于經典的 51 單片機的 P0 口而言,要想做輸入輸出功能必須加外部上拉電阻,否則無法輸出高電平邏輯 )。5. 標準的開漏腳一般只有輸出的能力。添加其它的判斷電路,才能具備雙向輸入、輸出的能力。應用中需注意:1. 開漏和開集的原理類似,在許多應用中我們利用開集電路代替開漏電路。例如,某輸入 Pin 要求由開漏電路驅動。則我們常見的驅動方式是利用一個三極管組成開集電路來驅動它, 即方便又節(jié)省成本。如13/163。2. 上拉電阻 R pull-up 的 阻值 決定了邏輯電平轉換的沿的速度。阻值越大,速度越低功耗越小。反之亦然。

23、Push-Pull 輸出就是一般所說的推挽輸出,在 CMOS電路里面應該較CMOS輸出更合適,應為在 CMOS里面的 pushpull 輸出能力不可能做得雙極那么大。輸出能力看 IC內部輸出極 N 管 P 管的面積。和開漏輸出相比, pushpull 的高低電平由 IC 的電源低定,不能簡單的做邏輯操作等。 pushpull 是現(xiàn)在 CMOS電路里面用得最多的輸出級設計方式。at91rm9200 GPIO 模擬 I 接口時注意!四 .OC、OD集電極開路門 (集電極開路OC 或源極開路 OD)open-drain 是漏極開路輸出的意思, 相當于集電極開路 (open-collector) 輸出

24、,即 ttl 中的集電極開路( oc)輸出。一般用于線或、線與,也有的用于電流驅動。open-drain 是對 mos 管而言,open-collector 是對雙極型管而言, 在用法上沒啥區(qū)別。開漏形式的電路有以下幾個特點:1.利用外部電路的驅動能力,減少IC 內部的驅動。或驅動比芯片電源電壓高的負載 .2. 可以將多個開漏輸出的 Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯” 關系。這也是 I,SMBus等總線判斷總線占用狀態(tài)的原理。 如果作為圖騰輸出必須接上拉電阻。接容性負載時,下降延是芯片內的晶體管,是有源驅動,速度較快;上升延是無源的外接電阻,速度慢。如果要求速度高電阻選擇要小,功耗會大。所以負載電阻的選擇要兼顧功耗和速度。3.可以利用改變上拉電源的電壓,改變傳輸電平。例如加上上拉電阻就可以提供 TTL/CMOS電平輸出等。14/164.開漏 Pin 不連接外部的上拉電阻,則只能輸出低電平。一般來說,開漏是用來連接不同電平的器件,匹配電平用的。5.正常的 CMOS輸出級是上、下兩個管子,把上面的管子去掉就是OPEN-DRAIN了。這種輸出的主要目的有兩個:電平轉換和線與。6.由于漏級開路,所以后級電路必須接一上拉電阻,上拉電阻的電源電壓就可以決定輸出電平。這樣你就可以進行任意電平的

溫馨提示

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

評論

0/150

提交評論