單價: | 面議 |
發(fā)貨期限: | 自買家付款之日起 天內(nèi)發(fā)貨 |
所在地: | 直轄市 北京 |
有效期至: | 長期有效 |
發(fā)布時間: | 2023-12-17 04:51 |
最后更新: | 2023-12-17 04:51 |
瀏覽次數(shù): | 109 |
采購咨詢: |
請賣家聯(lián)系我
|
GPIO_InitTypeDef structure
GPIO_InitTypeDef定義于文件“stm32f10x_gpio.h”:
typedef struct {
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}
GPIO_InitTypeDef;
GPIO_Pin
該參數(shù)選擇待設(shè)置的GPIO管腳,使用操作符“|”可以一次選中多個管腳??梢允褂孟卤碇械娜我饨M合。
GPIO_Pin_None: 無管腳被選中
GPIO_Pin_x: 選中管腳x(0--15)
GPIO_Pin_All: 選中全部管腳
GPIO_Speed
GPIO_Speed:
用以設(shè)置選中管腳的速率。
GPIO_Speed_10MHz: 輸出速率10MHz
GPIO_Speed_2MHz: 輸出速率2MHz
GPIO_Speed_50MHz: 輸出速率50MHz
GPIO_Mode
GPIO_Mode:
用以設(shè)置選中管腳的工作狀態(tài)。
GPIO_Mode_AIN: 模擬輸入
GPIO_Mode_IN_FLOATING: 浮空輸入
GPIO_Mode_IPD: 下拉輸入
GPIO_Mode_IPU: 上 拉輸入
GPIO_Mode_Out_OD: 開漏輸出
GPIO_Mode_Out_PP: 推挽輸出
GPIO_Mode_AF_OD: 復(fù)用開漏輸出
GPIO_Mode_AF_PP: 復(fù)用推挽輸出
函數(shù)GPIO_StructInit
功能描述:把GPIO_InitStruct中的每一個參數(shù)按缺省值填入 例:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStruct:
GPIO_Pin:GPIO_Pin_All
GPIO_Speed:GPIO_Speed_2MHz
GPIO_Mode:GPIO_Mode_IN_FLOATING
函數(shù)GPIO_ReadInputDataBit
功能描述:讀取指定端口管腳的輸入
例:
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
函數(shù)GPIO_ReadInputData
功能描述:讀取指定的GPIO端口輸入
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
函數(shù)GPIO_ReadOutputDataBit
功能描述:讀取指定端口管腳的輸出
ReadValue = GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_7);
函數(shù)GPIO_ReadOutputData
功能描述:讀取指定的GPIO端口輸出
ReadValue = GPIO_ReadOutputData(GPIOC);
函數(shù)GPIO_SetBits
功能描述:置位指定的數(shù)據(jù)端口位
例: 將端口GPIOA的第10、15腳置1(高電平)
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è)置或者清除指定的數(shù)據(jù)端口位
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);
函數(shù)GPIO_Write
功能描述:向指定GPIO數(shù)據(jù)端口寫入數(shù)據(jù)
GPIO_Write(GPIOA, 0x1101);
函數(shù)GPIO_PinLockConfig
功能描述:鎖定GPIO管腳設(shè)置寄存器
GPIO_PinLockConfig(GPIOA, GPIO_Pin_0|GPIO_Pin_1);
函數(shù)GPIO_EventOutputConfig
功能描述:選擇GPIO管腳用作事件輸出 例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);
GPIO_PortSource
GPIO_PortSource用以選擇用作事件輸出的GPIO端口。
函數(shù)GPIO_EventOutputCmd
功能描述:使能或者失能事件輸出 例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
GPIO_EventOutputCmd(ENABLE);
函數(shù)GPIO_PinRemapConfig
功能描述:改變指定管腳的映射 例:
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
一.GPIO概述
1、共有8種模式,可以通過編程選擇:
1. 浮空輸入 2. 帶上拉輸入 3. 帶下拉輸入 4. 模擬輸入
5. 開漏輸出——(此模式可實現(xiàn)hotpower說的真雙向IO) 6. 推挽輸出
7. 復(fù)用功能的推挽輸出 8. 復(fù)用功能的開漏輸出
模式7和模式8需根據(jù)具體的復(fù)用功能決定。
2、專門的寄存器(GPIOx_BSRR和GPIOx_BRR)實現(xiàn)對GPIO口的原子操作,即回避了設(shè)置或清除I/O端口時的“讀-修改-寫”操作,使得設(shè)置或清除I/O端口的操作不會被中斷處理打斷而造成誤動作。
3、每個GPIO口都可以作為外部中斷的輸入,便于系統(tǒng)靈活設(shè)計。
4、I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這有利于噪聲控制。這個速度是指I/O口驅(qū)動電路的響應(yīng)速度而不是輸出信號的速度,輸出信號的速度與程序有關(guān)(芯片內(nèi)部在I/O口的輸出部分安排了多個響應(yīng)速度不同的輸出驅(qū)動電路,用戶可以根據(jù)自己的需要選擇合適的驅(qū)動電路)。通過選擇速度來選擇不同的輸出驅(qū)動模塊,達(dá)到的噪聲控制和降低功耗的目的。高頻的驅(qū)動電路,噪聲也高,當(dāng)不需要高的輸出頻率時,請選用低頻驅(qū)動電路,這樣非常有利于提高系統(tǒng)的EMI性能。當(dāng)然如果要輸出較高頻率的信號,但卻選用了較低頻率的驅(qū)動模塊,很可能會得到失真的輸出信號。
4.1各種接口的措施:
4.1.1對于串口,假如波特率只需115.2k,那么用2M的GPIO的引腳速度就夠了,既省電也噪聲小。
4.1.2對于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引腳速度或許不夠,這時可以選用10M的GPIO引腳速度。
4.1.3對于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引腳速度顯然不夠了,需要選用50M的GPIO的引腳速度。
4.2 GPIO口設(shè)為輸入時,輸出驅(qū)動電路與端口是斷開,所以輸出速度配置無意義。
4.3 在復(fù)位期間和剛復(fù)位后,復(fù)用功能未開啟,I/O端口被配置成浮空輸入模式。
4.4 所有端口都有外部中斷能力。為了使用外部中斷線,端口必須配置成輸入模式。
4.5 GPIO口的配置具有上鎖功能,當(dāng)配置好GPIO口后,可以通過程序鎖住配置組合,直到下次芯片復(fù)位才能解鎖。
5、所有I/O口兼容CMOS和TTL,多數(shù)I/O口兼容5V電平。
6、大電流驅(qū)動能力:GPIO口在高低電平分別為0.4V和VDD-0.4V時,可以提供或吸收8mA電流;如果把輸入輸出電平分別放寬到1.3V和VDD-1.3V時,可以提供或吸收20mA電流。
7、具有獨立的喚醒I/O口。
8、很多I/O口的復(fù)用功能可以重新映射。
9、GPIO口的配置具有上鎖功能,當(dāng)配置好GPIO口后,可以通過程序鎖住配置組合,直到下次芯片復(fù)位才能解鎖。此功能非常有利于在程序跑飛的情況下保護系統(tǒng)中其他的設(shè)備,不會因為某些I/O口的配置被改變而損壞——如一個輸入口變成輸出口并輸出電流。
二.推挽結(jié)構(gòu)
一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導(dǎo)通的時候另一個截止.要實現(xiàn)線與需要用OC(open collector)門電路 .如果輸出級的有兩個三極管,始終處于一個導(dǎo)通、一個截止的狀態(tài),也就是兩個三級管推挽相連,這樣的電路結(jié)構(gòu)稱為推拉式電路或圖騰柱(Totem- pole)輸出電路(可惜,圖無法貼上)。當(dāng)輸出低電平時,也就是下級負(fù)載門輸入低電平時,輸出端的電流將是下級門灌入T4;當(dāng)輸出高電平時,也就是下級負(fù)載門輸入高電平時,輸出端的電流將是下級門從本級電源經(jīng) T3、D1 拉出。這樣一來,輸出高低電平時,T3 一路和 T4 一路將交替工作,從而減低了功耗,提高了每個管的承受能力。又由于不論走哪一路,管子導(dǎo)通電阻都很小,使RC常數(shù)很小,轉(zhuǎn)變速度很快。因此,推拉式輸出級既提高電路的負(fù)載能力,又提高開關(guān)速度。供你參考。
推挽電路是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負(fù)責(zé)正負(fù)半周的波形放大任務(wù),電路工作時,兩只對稱的功率開關(guān)管每次只有一個導(dǎo)通,所以導(dǎo)通損耗小效率高。
輸出既可以向負(fù)載灌電流,也可以從負(fù)載抽取電流
三.開漏電路
在電路設(shè)計時我們常常遇到開漏(open drain)和開集(open collector)的概念。所謂開漏電路概念中提到的“漏”就是指MOSFET的漏極。同理,開集電路中的“集”就是指三極管的集電極。開漏電路就是指以MOSFET的漏極為輸出的電路。一般的用法是會在漏極外部的電路添加上拉電阻。完整的開漏電路應(yīng)該由開漏器件和開漏上拉電阻組成。
組成開漏形式的電路有以下幾個特點:
1. 利用 外部電路的驅(qū)動能力,減少IC內(nèi)部的驅(qū)動。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時,驅(qū)動電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部僅需很下的柵極驅(qū)動電流。如圖1。
2. 可以將多個開漏輸出的Pin,連接到一條線上。形成 “與邏輯” 關(guān)系。如圖1,當(dāng)PIN_A、PIN_B、PIN_C任意一個變低后,開漏線上的邏輯就為0了。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。
3. 可以利用改變上拉電源的電壓,改變傳輸電平。如圖2, IC的邏輯電平由電源Vcc1決定,而輸出高電平則由Vcc2決定。這樣我們就可以用低電平邏輯控制輸出高電平邏輯了。
4. 開漏Pin不連接外部的上拉電阻,則只能輸出低電平(因此對于經(jīng)典的51單片機的P0口而言,要想做輸入輸出功能必須加外部上拉電阻,否則無法輸出高電平邏輯)。
5. 標(biāo)準(zhǔn)的開漏腳一般只有輸出的能力。添加其它的判斷電路,才能具備雙向輸入、輸出的能力。
應(yīng)用中需注意:
1. 開漏和開集的原理類似,在許多應(yīng)用中我們利用開集電路代替開漏電路。例如,某輸入Pin要求由開漏電路驅(qū)動。則我們常見的驅(qū)動方式是利用一個三極管組成開集電路來驅(qū)動它,即方便又節(jié)省成本。如圖3。
2. 上拉電阻R pull-up的 阻值 決定了 邏輯電平轉(zhuǎn)換的沿的速度 。阻值越大,速度越低功耗越小。反之亦然。
Push-Pull輸出就是一般所說的推挽輸出,在CMOS電路里面應(yīng)該較CMOS輸出更合適,應(yīng)為在CMOS里面的push-pull輸出能力不可能做得雙極那么大。輸出能力看IC內(nèi)部輸出極N管P管的面積。和開漏輸出相比,push-pull的高低電平由IC的電源低定,不能簡單的做邏輯操作等。 push-pull是現(xiàn)在CMOS電路里面用得多的輸出級設(shè)計方式。 at91rm9200 GPIO 模擬I2C接口時注意??!
四.OC、OD
集電極開路門(集電極開路 OC 或源極開路OD)
open-drain是漏極開路輸出的意思,相當(dāng)于集電極開路(open-collector)輸出,即ttl中的集電極開路(oc)輸出。一般用于線或、線與,也有的用于電流驅(qū)動。
open-drain是對mos管而言,open-collector是對雙極型管而言,在用法上沒啥區(qū)別。
開漏形式的電路有以下幾個特點:
1.利用外部電路的驅(qū)動能力,減少IC內(nèi)部的驅(qū)動。 或驅(qū)動比芯片電源電壓高的負(fù)載. 2. 可以將多個開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。如果作為圖騰輸出必須接上拉電阻。接容性負(fù)載時,下降延是芯片內(nèi)的晶體管,是有源驅(qū)動,速度較快;上升延是無源的外接電阻,速度慢。如果要求速度高電阻選擇要小,功耗會大。所以負(fù)載電阻的選擇要兼顧功耗和速度。
3.可以利用改變上拉電源的電壓,改變傳輸電平。例如加上上拉電阻就可以提供TTL/CMOS電平輸出等。
4.開漏Pin不連接外部的上拉電阻,則只能輸出低電平。一般來說,開漏是用來連接不同電平的器件,匹配電平用的。
5.正常的CMOS輸出級是上、下兩個管子,把上面的管子去掉就是OPEN-DRAIN了。這種輸出的主要目的有兩個:電平轉(zhuǎn)換和線與。 6.由于漏級開路,所以后級電路必須接一上拉電阻,上拉電阻的電源電壓就可以決定輸出電平。這樣你就可以進行任意電平的轉(zhuǎn)換了。
7.線與功能主要用于有多個電路對同一信號進行拉低操作的場合,如果本電路不想拉低,就輸出高電平,因為OPEN-DRAIN上面的管子被拿掉,高電平是靠外接的上拉電阻實現(xiàn)的。(而正常的CMOS輸出級,如果出現(xiàn)一個輸出為高另外一個為低時,等于電源短路。)
8.OPEN-DRAIN提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負(fù)載充電,所以當(dāng)電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。
?五.線或邏輯與線與邏輯
在一個結(jié)點(線)上, 連接一個上拉電阻到電源 VCC 或 VDD 和 n 個 NPN 或 NMOS 晶體管的集電極 C 或漏極 D, 這些晶體管的發(fā)射極 E 或源極 S 都接到地線上, 只要有一個晶體管飽和, 這個結(jié)點(線)就被拉到地線電平上.
因為這些晶體管的基極注入電流(NPN)或柵極加上高電平(NMOS), 晶體管就會飽和, 所以這些基極或柵極對這個結(jié)點(線)的關(guān)系是或非 NOR 邏輯. 如果這個結(jié)點后面加一個反相器, 就是或 OR 邏輯.
注:個人理解:線與,接上拉電阻至電源。(~A)&(~B)=~(A+B),由公式較容易理解線與此概念的由來 ;
如果用下拉電阻和 PNP 或 PMOS 管就可以構(gòu)成與非 NAND 邏輯, 或用負(fù)邏輯關(guān)系轉(zhuǎn)換與/或邏輯.
注:線或,接下拉電阻至地。(~A)+(~B)=~(AB);
這些晶體管常常是一些邏輯電路的集電極開路 OC 或源極開路 OD 輸出端. 這種邏輯通常稱為線與/線或邏輯, 當(dāng)你看到一些芯片的 OC 或 OD 輸出端連在一起, 而有一個上拉電阻時, 這就是線或/線與了, 但有時上拉電阻做在芯片的輸入端內(nèi).
順便提示如果不是 OC 或 OD 芯片的輸出端是不可以連在一起的, 總線 BUS 上的雙向輸出端連在一起是有管理的, 同時只能有一個作輸出, 而其他是高阻態(tài)只能輸入