




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1GPIO GPIO 設(shè)計(jì)設(shè)計(jì)2配置模式CNF1CNF0MODE1MODE0PxODR寄存器通用輸出推挽(Push-Pull)00 0 或 1開漏(Open-Drain)10 或 1復(fù)用功能 輸出推挽(Push-Pull)10不使用開漏(Open-Drain)1不使用輸入模擬輸入0000不使用浮空輸入1不使用下拉輸入100上拉輸入13輸出模式位MODE1:0意義00保留01最大輸出速度為10MHz10最大輸出速度為2MHz11最大輸出速度為50MHz4端口配置低寄存器(GPIOx_CRL) (x=A.E)(GPIOx_CRL) (x=A.E) 偏移地址:0 x00 復(fù)位值:0 x4444 44
2、445位 31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:2CNFy1:0:端口x配置位(y = 815) (Port x config-uration bits)軟件通過這些位配置相應(yīng)的I/O端口。在輸入模式(MODE1:0=00):00:模擬輸入模式01:浮空輸入模式(復(fù)位后的狀態(tài))10:上拉/下拉輸入模式11:保留 在輸出模式(MODE1:000):00:通用推挽輸出模式01:通用開漏輸出模式10:復(fù)用功能推挽輸出模式11:復(fù)用功能開漏輸出模式6位29:28 25:24 21:20 17:16 13:12 9:8 5:4 1:0MODEy1:0:端口x
3、的模式位(y = 07) (Port x mode bits)軟件通過這些位配置相應(yīng)的I/O端口。00:輸入模式(復(fù)位后的狀態(tài))01:輸出模式,最大速度10MHz10:輸出模式,最大速度2MHz11:輸出模式,最大速度50MHz7 偏移地址:0 x04 復(fù)位值:0 x4444 4444端口配置高寄存器(GPIOx_CRH) (GPIOx_CRH) 8 CNFy1:0CNFy1:0:端口x配置位(y = 815) 軟件通過這些位配置相應(yīng)的I/O端口。 在輸入模式(MODE1:0=00): 00:模擬輸入模式 01:浮空輸入模式(復(fù)位后的狀態(tài)) 10:上拉/下拉輸入模式 11:保留 在輸出模式(M
4、ODE1:000): 00:通用推挽輸出模式 01:通用開漏輸出模式 10:復(fù)用功能推挽輸出模式 11:復(fù)用功能開漏輸出模式 位 31:30 27:26 23:22 19:18 15:14 11:10 7:6 3:29 MODEy1:0MODEy1:0:端口x的模式位(y = 815) 軟件通過這些位配置相應(yīng)的I/O端口。 00:輸入模式(復(fù)位后的狀態(tài)) 01:輸出模式,最大速度10MHz 10:輸出模式,最大速度2MHz 11:輸出模式,最大速度50MHz 位29:28 25:24 21:20 17:16 13:12 9:8 5:4 1:010 地址偏移:0 x08 復(fù)位值:0 x0000
5、XXXX端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(GPIOx_IDR)11 位31:16保留,始終讀為0。 位15:0 IDRy15:0IDRy15:0:端口輸入數(shù)據(jù)(y = 015) (Port input data)這些位為只讀并只能以字(16位)的形式讀出。讀出的值為對應(yīng)I/O口的狀態(tài)。12 地址偏移:0Ch 復(fù)位值:0 x0000 0000端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(GPIOx_ODR)13 位31:16保留,始終讀為0。 位15:0ODRy15:0ODRy15:0:端口輸出數(shù)據(jù)(y = 015) 這些位可讀可寫并只能以字(16位)的形式操作。注:對GPIOx_BSRR(
6、x = AE),可以分別地對各個(gè)ODR位進(jìn)行獨(dú)立的設(shè)置/清除。14端口位設(shè)置/ /清除寄存器(GPIOx_BSRR)(GPIOx_BSRR) 地址偏移:0 x10 復(fù)位值:0 x0000 000015位31:16 BRyBRy: 清除端口x的位y (y = 015) (Port x Reset bit y)這些位只能寫入并只能以字(16位)的形式操作。0:對對應(yīng)的ODRy位不產(chǎn)生影響1:清除對應(yīng)的ODRy位為0注:如果同時(shí)設(shè)置了BSy和BRy的對應(yīng)位,BSy位起作用。16 位15:0 BSyBSy: 設(shè)置端口x的位y (y = 015) (Port x Set bit y)這些位只能寫入并只能
7、以字(16位)的形式操作。0:對對應(yīng)的ODRy位不產(chǎn)生影響1:設(shè)置對應(yīng)的ODRy位為117端口位清除寄存器(GPIOx_BRR) (GPIOx_BRR) 地址偏移:0 x14 復(fù)位值:0 x0000 000018 位31:16保留。 位15:0 BRyBRy: 清除端口x的位y (y = 015) (Port x Reset bit y)這些位只能寫入并只能以字(16位)的形式操作。0:對對應(yīng)的ODRy位不產(chǎn)生影響1:清除對應(yīng)的ODRy位為019端口配置鎖定寄存器(GPIOx_LCKR)(GPIOx_LCKR)當(dāng)執(zhí)行正確的寫序列設(shè)置了位16(LCKK)時(shí),該寄存器用來鎖定端口位的配置。位15:
8、0用于鎖定GPIO端口的配置。在規(guī)定的寫入操作期間,不能改變LCKP15:0。當(dāng)對相應(yīng)的端口位執(zhí)行了 LOCK序列后,在下次系統(tǒng)復(fù)位之前將不能再更改端口位的配置。 每個(gè)鎖定位鎖定控制寄存器(CRL, CRH)中相應(yīng)的4個(gè)位。 地址偏移:0 x18 復(fù)位值:0 x0000 000020 位31:17保留。 位16 LCKK:鎖鍵 (Lock key)該位可隨時(shí)讀出,它只可通過鎖鍵寫入序列修改。0:端口配置鎖鍵位激活1:端口配置鎖鍵位被激活,下次系統(tǒng)復(fù)位前GPIOx_LCKR寄存器被鎖住。 鎖鍵的寫入序列:寫1 - 寫0 - 寫1 - 讀0 - 讀1 最后一個(gè)讀可省略,但可以用來確認(rèn)鎖鍵已被激活。
9、 注:在操作鎖鍵的寫入序列時(shí),不能改變LCK15:0的值。 操作鎖鍵寫入序列中的任何錯(cuò)誤將不能激活鎖鍵。2122位15:0 LCKy: 端口x的鎖位y (y = 015) 這些位可讀可寫但只能在LCKK位為0時(shí)寫入。 0:不鎖定端口的配置 1:鎖定端口的配置2324 (1) VDD_FT 對5伏容忍I/O腳是特殊的,它與VDD不同25 一、一、GPIOGPIO的各種模式的各種模式 GPIOGPIO管腳可以被配置為多種工作模式,其中有管腳可以被配置為多種工作模式,其中有3 3種比較常用:高阻輸入、推挽輸出、開漏輸出種比較常用:高阻輸入、推挽輸出、開漏輸出1 1 高阻輸入高阻輸入(Input)(I
10、nput) 輸入模式的結(jié)構(gòu)比較簡單,就是一個(gè)帶有施密特輸入模式的結(jié)構(gòu)比較簡單,就是一個(gè)帶有施密特觸發(fā)輸入的三態(tài)緩沖器(觸發(fā)輸入的三態(tài)緩沖器(U1U1),并具有很高的輸),并具有很高的輸入等效阻抗。入等效阻抗。 GPIO高阻輸入模式結(jié)構(gòu)示意圖 26 施密特觸發(fā)輸入的作用是能將緩慢變化的或者是畸變的輸入脈沖信號整形成比較理想的矩形脈沖信號。 執(zhí)行GPIO管腳讀操作時(shí),在讀脈沖(Read Pulse)的作用下會(huì)把管腳(Pin)的當(dāng)前電平狀態(tài)讀到內(nèi)部總線上(Internal Bus)。在不執(zhí)行讀操作時(shí),外部管腳與內(nèi)部總線之間是隔離的。27 2 2 推挽輸出推挽輸出(Output)(Output)28
11、U1是輸出鎖存器,執(zhí)行GPIO管腳寫操作時(shí),在寫脈沖(Write Pulse)的作用下,數(shù)據(jù)被鎖存到Q和/Q。 T1和T2構(gòu)成CMOS反相器,T1導(dǎo)通或T2導(dǎo)通時(shí)都表現(xiàn)出較低的阻抗,但T1和T2不會(huì)同時(shí)導(dǎo)通或同時(shí)關(guān)閉,最后形成的是推挽輸出。 在推挽輸出模式下,GPIO還具有回讀功能,實(shí)現(xiàn)回讀功能的是一個(gè)簡單的三態(tài)門U2。 注意:執(zhí)行回讀功能時(shí),讀到的是管腳的輸出鎖存狀態(tài),而不是外部管腳Pin的狀態(tài)。29 3 3 開漏輸出開漏輸出(OutputOD)(OutputOD) 開漏輸出和推挽輸出相比結(jié)構(gòu)基本相同,但只有開漏輸出和推挽輸出相比結(jié)構(gòu)基本相同,但只有下拉晶體管下拉晶體管T1T1而沒有上拉晶體
12、而沒有上拉晶體管。同樣,管。同樣,T1T1實(shí)際實(shí)際上也是多組可編程選擇的晶體管。上也是多組可編程選擇的晶體管。 30 開漏輸出結(jié)構(gòu)沒有內(nèi)部上拉,因此在實(shí)際應(yīng)用時(shí)通常都要外接合適的上拉電阻(通常采用4.710k)。開漏輸出能夠方便地實(shí)現(xiàn)“線與”邏輯功能,即多個(gè)開漏的管腳可以直接并在一起 。 開漏輸出的另一種用途是能夠方便地實(shí)現(xiàn)不同邏輯電平之間的轉(zhuǎn)換(如3.3V到5V之間),只需外接一個(gè)上拉電阻,而不需要額外的轉(zhuǎn)換電路。典型的應(yīng)用例子就是基于開漏電氣連接的I2C總線。31 4 4 鉗位二極管鉗位二極管 其作用是防止從外部管其作用是防止從外部管 腳腳PinPin輸入的電壓過高輸入的電壓過高 或者過低
13、?;蛘哌^低。 32 二、二、GPIOGPIO配置配置 (1 1)GPIO_Mode_AIN GPIO_Mode_AIN 模擬輸入模擬輸入 (2 2)GPIO_Mode_IN_FLOATING GPIO_Mode_IN_FLOATING 浮空輸入浮空輸入 (3 3)GPIO_Mode_IPD GPIO_Mode_IPD 下拉輸入下拉輸入 (4 4)GPIO_Mode_IPU GPIO_Mode_IPU 上拉輸入上拉輸入 (5)GPIO_Mode_Out_OD 開漏輸出 (6)GPIO_Mode_Out_PP 推挽輸出 (7)GPIO_Mode_AF_OD 復(fù)用開漏輸出 (8)GPIO_Mode_
14、AF_PP 復(fù)用推挽輸出33 1. I/O口速度 GPIO_Speed_10MHz 最高輸出速率10MHz GPIO_Speed_2MHz 最高輸出速率2MHz GPIO_Speed_50MHz 最高輸出速率50MHz I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這個(gè)速度是指I/O口驅(qū)動(dòng)電路的響應(yīng)速度而不是輸出信號的速度,輸出信號的速度與程序有關(guān) 。34 通過選擇速度來選擇不同的輸出驅(qū)動(dòng)模塊,達(dá)到最佳的噪聲控制和降低功耗的目的。 高頻的驅(qū)動(dòng)電路,噪聲也高,當(dāng)不需要高的輸出頻率時(shí),請選用低頻驅(qū)動(dòng)電路,這樣非常有利于提高系統(tǒng)的EMI性能。 當(dāng)然如果要輸出較高頻率的
15、信號,但卻選用了較低頻率的驅(qū)動(dòng)模塊,很可能會(huì)得到失真的輸出信號。35 關(guān)鍵是GPIO的引腳速度跟應(yīng)用匹配 對于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引腳速度就夠了,既省電也噪聲小。 對于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引腳速度或許不夠,這時(shí)可以選用10M的GPIO引腳速度。 對于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引腳速度顯然不夠了,需要選用50M的GPIO的引腳速度。 36 2. GPIO口設(shè)為輸入時(shí),輸出驅(qū)動(dòng)電路與端口是斷開,所以輸出速度配置無意義。 3. 在復(fù)位期間和剛復(fù)位后,復(fù)用功能未開啟,I/O
16、端口被配置成浮空輸入模式。 所有端口都有外部中斷能力。為了使用外部中斷線,端口必須配置成輸入模式。 37 4.推挽輸出與開漏輸出的區(qū)別推挽輸出與開漏輸出的區(qū)別 推挽輸出推挽輸出: :可以輸出高可以輸出高, ,低電平低電平, ,連接數(shù)字器件連接數(shù)字器件; ;開開漏輸出漏輸出: :輸出端相當(dāng)于三極管的集電極輸出端相當(dāng)于三極管的集電極. . 要得到要得到高電平狀態(tài)需要上拉電阻才行高電平狀態(tài)需要上拉電阻才行. . 適合于做電流型適合于做電流型的驅(qū)動(dòng)的驅(qū)動(dòng), ,其吸收電流的能力相對強(qiáng)其吸收電流的能力相對強(qiáng)( (一般一般20mA20mA以以內(nèi)內(nèi)).). 38 三、在三、在STM32STM32中選用中選用I
17、OIO模式模式 (1 1) 浮空輸入浮空輸入_IN_FLOATING _IN_FLOATING 浮空輸入,可以做浮空輸入,可以做KEYKEY識識別,別,RX1RX1 (2 2)帶上拉輸入)帶上拉輸入_IPUIO_IPUIO內(nèi)部上拉電阻輸入內(nèi)部上拉電阻輸入 (3 3)帶下拉輸入)帶下拉輸入_IPDIO_IPDIO內(nèi)部下拉電阻輸入內(nèi)部下拉電阻輸入 (4 4) 模擬輸入模擬輸入_AIN _AIN 應(yīng)用應(yīng)用ADCADC模擬輸入,或者低功耗下模擬輸入,或者低功耗下省電。省電。 (5 5)開漏輸出)開漏輸出_OUT_OD IO_OUT_OD IO輸出輸出0 0接接GNDGND,IOIO輸出輸出1 1,懸空
18、,懸空,需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。當(dāng)輸出為需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。當(dāng)輸出為1 1時(shí),時(shí),IOIO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣這樣IOIO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔兛谝簿涂梢杂赏獠侩娐犯淖優(yōu)榈碗娖交虿蛔???伞?梢宰x以讀IOIO輸入電平變化,實(shí)現(xiàn)輸入電平變化,實(shí)現(xiàn)C51C51的的IOIO雙向功能。雙向功能。39 (6)推挽輸出)推挽輸出_OUT_PP IO輸出輸出0-接接GND, IO輸出輸出1 -接接VCC,讀輸入值是未,讀輸入值是未知的。知的。 (7)復(fù)用功能的推挽輸出)復(fù)用功能
19、的推挽輸出_AF_PP 片片內(nèi)外設(shè)功能(內(nèi)外設(shè)功能(I2C的的SCL,SDA) (8)復(fù)用功能的開漏輸出)復(fù)用功能的開漏輸出_AF_OD片片內(nèi)外設(shè)功能(內(nèi)外設(shè)功能(TX1,MOSI,MISO,SCK,SS)40 實(shí)例實(shí)例 (1)模擬)模擬I2C使用開漏輸出使用開漏輸出_OUT_OD,接上拉電阻,能夠,接上拉電阻,能夠正確輸出正確輸出0和和1;讀值時(shí)先;讀值時(shí)先 GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以讀;拉高,然后可以讀IO的值;使用的值;使用GPIO_ReadInputData Bit(GPIOB, GPIO_Pin_0); (2)如果是無上拉電阻,)如
20、果是無上拉電阻,IO默認(rèn)是高電平;需要讀取默認(rèn)是高電平;需要讀取IO的的值,可以使用值,可以使用 (3)帶上拉輸入)帶上拉輸入_IPU和浮空輸入和浮空輸入_IN_FLOATING和和 開漏開漏輸出輸出_OUT_OD;41操作寄存器方法代碼 #include 02#include system.h 03 04 05/LED端口定義0607#define LED0 PAout(4)/ PA408 09voidvoid Gpio_Init(voidvoid); 4210 11intint main(voidvoid)12 13 Rcc_Init(9); /系統(tǒng)時(shí)鐘設(shè)置14 Gpio_Init();
21、/初始化與LED連接的硬件接口15 whilewhile(1)16 17 LED0=0;18 delay(300000); /延時(shí)300ms4319 LED0=1;20 delay(300000);21 22 23 24 25 voidvoid Gpio_Init(voidvoid)264427 RCC-APB2ENR|=1CRL&=0XFFF0FFFF;30 GPIOA-CRL|=0X00030000;/PA4 推挽輸出 31 GPIOA-ODR|=1APB2ENR|=1APB2ENR|=1CRH&=0XFFFFFFF0; GPIOA-CRH|=0X00000003;/PA8
22、 推 GPIOA-ODR|=1CRL&=0XFFFFF0FF;GPIOD-CRL|=0X00000300;/PD.2推挽輸出GPIOD-ODR|=12; /PD.2輸出高 63/led.h#ifndef _LED_H#define _LED_H #include sys.h/LED驅(qū)動(dòng)代碼 /LED端口定義#define LED0 PAout(8)/ PA8#define LED1 PDout(2)/ PD2void LED_Init(void);/初始化 #endif64#include #include sys.h#include usart.h#include delay.h#i
23、nclude led.h /跑馬燈實(shí)驗(yàn) int main(void) Stm32_Clock_Init(9); /系統(tǒng)時(shí)鐘設(shè)置65delay_init(72); /延時(shí)初始化LED_Init(); /初始化與LED連接的硬件接口while(1) LED0=0;LED1=1;delay_ms(300);LED0=1;LED1=0;delay_ms(300); 66例子(固件庫操作)/led.c#include led.hvoid LED_GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); 67GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 集團(tuán)公司責(zé)任單位二級非關(guān)鍵績效目標(biāo)評估細(xì)則
- 江蘇養(yǎng)老院活動(dòng)方案
- 水果奶昔活動(dòng)方案
- 檢察院慰問親屬活動(dòng)方案
- 河南進(jìn)校園活動(dòng)方案
- 母嬰雙十一市場活動(dòng)方案
- 民間記憶征集活動(dòng)方案
- 樓盤燒烤活動(dòng)策劃方案
- 比賽獎(jiǎng)品活動(dòng)方案
- 殘聯(lián)年終活動(dòng)方案
- 高處墜落安全課件
- 隸書-課件教學(xué)課件
- epc項(xiàng)目勞務(wù)分包合同
- 【MOOC】算法初步-北京大學(xué) 中國大學(xué)慕課MOOC答案
- 食品檢驗(yàn)員考試題庫單選題100道及答案解析
- 鄉(xiāng)鎮(zhèn)污水管道改造施工方案
- 四年級下冊道德與法治知識點(diǎn)
- 電商直播平臺(tái)主播操作手冊
- 人工智能(AI)訓(xùn)練師職業(yè)技能鑒定考試題及答案
- ASTM-D3359-(附著力測試標(biāo)準(zhǔn))-中文版
- 全國中小學(xué)生學(xué)籍信息管理系統(tǒng)學(xué)生基本信息采集表(2022修訂版)
評論
0/150
提交評論