一、GPIO的綜合描述
stm32每一個GPIO端口擁有2個32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2個32bits的數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR),1個32bits的set/reset寄存器(GPIOx_BSRR),1個16bits的reset寄存器(GPIOx_BRR)和1個32bits的Lock寄存器(GPIOx_LCKR)。
(一)每一個IO引腳都可以使用軟件配置為以下幾種模式:
1. 浮空輸入
2. 帶上拉輸入
3. 帶下拉輸入
4. 模擬輸入
5. 開漏輸出——(此模式可實現(xiàn)hotpower說的真雙向IO)
6. 推挽輸出
7. 復用功能的推挽輸出
8. 復用功能的開漏輸出
模式7和模式8需根據(jù)具體的復用功能決定。
每一個IO引腳都可以單獨編程,但是每一個IO寄存器只能32bits訪問(半字或者字節(jié)訪問都被禁止)。
(二)專門的寄存器(GPIOx_BSRR和GPIOx_BRR)實現(xiàn)對GPIO口的原子操作,即回避了設置或清除I/O端口時的“讀-修改-寫”操作,使得設置或清除I/O端口的操作不會被中斷處理打斷而造成誤動作。
(三)每個GPIO口都可以作為外部中斷的輸入,便于系統(tǒng)靈活設計。
(四)I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這有利于噪聲控制。
(五)所有I/O口兼容CMOS和TTL,多數(shù)I/O口兼容5V電平。
(六)大電流驅(qū)動能力:GPIO口在高低電平分別為0.4V和VDD-0.4V時,可以提供或吸收8mA電流;如果把輸入輸出電平分別放寬到1.3V和VDD-1.3V時,可以提供或吸收20mA電流。
(七)具有獨立的喚醒I/O口。
(八)很多I/O口的復用功能可以重新映射。
(九)GPIO口的配置具有上鎖功能,當配置好GPIO口后,可以通過程序鎖住配置組合,直到下次芯片復位才能解鎖。此功能非常有利于在程序跑飛的情況下保護系統(tǒng)中其他的設備,不會因為某些I/O口的配置被改變而損壞——如一個輸入口變成輸出口并輸出電流。
二、GPIO的結(jié)構(gòu)
三、GPIO的配置
(一) GPIO模式選擇和速度匹配
(1) 浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1。
(2)帶上拉輸入_IPU——IO內(nèi)部上拉電阻輸入。
(3)帶下拉輸入_IPD—— IO內(nèi)部下拉電阻輸入。
(4) 模擬輸入_AIN ——應用ADC模擬輸入,或者低功耗下省電。
(5)開漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現(xiàn)輸出高電平。當輸出為1時,IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔???梢宰xIO輸入電平變化,實現(xiàn)C51的IO雙向功能。
(6)推挽輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的。
(7)復用功能的推挽輸出_AF_PP ——片內(nèi)外設功能(I 2C的SCL,SDA)
(8)復用功能的開漏輸出_AF_OD——片內(nèi)外設功能(TX1,MOSI,MISO.SCK)
GPIO輸出的速度匹配:
GPIO_Speed_10MHz 最高輸出速率10MHz
GPIO_Speed_2MHz 最高輸出速率2MHz
GPIO_Speed_50MHz 最高輸出速率50MHz
I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這個速度是指I/O口驅(qū)動電路的響應速度而不是輸出信號的速度,輸出信號的速度與程序有關(guān)(芯片內(nèi)部在I/O口的輸出部分安排了多個不同響應速度的輸出驅(qū)動電路,用戶可以根據(jù)自己的需要選擇合適的驅(qū)動電路)。通過選擇速度來選擇不同的輸出驅(qū)動模塊,達到最佳的噪聲控制和降低功耗的目的。高頻的驅(qū)動電路,噪聲也高,當不需要高的輸出頻率時,請選用低頻驅(qū)動電路,這樣非常有利于提高系統(tǒng)的EMI性能。當然如果要輸出較高頻率的信號,但卻選用了較低頻率的驅(qū)動模塊,很可能會得到失真的輸出信號。
有一點是關(guān)鍵,即GPIO的引腳速度跟應用匹配(推薦10倍以上)。比如:
1) 對于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引腳速度就夠了,既省電也噪聲小。
2 )對于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引腳速度或許不夠,這時可以選用10M的GPIO引腳速度。
3 )對于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引腳速度顯然不夠了,需要選用50M的GPIO的引腳速度。
(二) 在STM32中如何配置片內(nèi)外設使用的IO端口
①配置輸入的時鐘;②初始化后即被激活(開啟);③如果使用該外設的輸入輸出管腳,則需要配置相應的GPIO端口(否則該外設對應的輸入輸出管腳可以做普通GPIO管腳使用);④再對外設進行詳細配置。
對應到外設的輸入輸出功能有下述三種情況:
①外設對應的管腳為輸出:需要根據(jù)外圍電路的配置選擇對應的管腳為復用功能的推挽輸出或復用功能的開漏輸出。
②外設對應的管腳為輸入:則根據(jù)外圍電路的配置可以選擇浮空輸入、帶上拉輸入或帶下拉輸入。
③ADC對應的管腳:配置管腳為模擬輸入。
如果把端口配置成復用輸出功能,則引腳和輸出寄存器斷開,并和片上外設的輸出信號連接。將管腳配置成復用輸出功能后,如果外設沒有被激活,那么它的輸出將不確定。
(三) 通用IO端口(GPIO)初始化:
1、 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2總線外設時鐘;
2 、RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):釋放GPIO復位;
3、配置各個PIN端口(模擬輸入_AIN、輸入浮空_IN_FLOATING、輸入上拉_IPU、輸入下拉_IPD、開漏輸出_OUT_OD、推挽式輸出_OUT_PP、推挽式復用輸出_AF_PP、開漏復用輸出_AF_OD)和匹配速度。
4 、GPIO初始化完成
四、GPIO實例
#include "stm32f10x.h"
#include "stm32_eval.h"
GPIO_InitTypeDef GPIO_InitStructure;
void RCC_Configuration(void);
void Delay(__IO uint32_t nCount);
int main(void)
{
RCC_Configuration();
#if 0
// 配置所有未使用GPIO引腳為輸入模式(浮空輸入),這樣可以降低功耗,并且提高器件的抗EMI/EMC 的性能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
//armfly :注釋掉的原因是當代碼在外部存儲器運行時,GPIOD,E,F,G部分IO用于FSMC,因此對這些IO不能重置,否則導致取指異常
// GPIO_Init(GPIOD, &GPIO_InitStructure);
// GPIO_Init(GPIOE, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE, DISABLE);
#ifdef USE_STM3210E_EVAL
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
// armfly :由于代碼在外部SRAM運行時,GPIOD,E,F,G部分IO用于FSMC,
因此對這些IO不能重置,否則導致取指異常
// GPIO_Init(GPIOF, &GPIO_InitStructure);
// GPIO_Init(GPIOG, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, DISABLE);
#endif
#endif
// 初始化STM3210X-EVAL板上的4個LED,即初始化LED對應的IO引腳
STM_EVAL_LEDInit(LED1);
STM_EVAL_LEDInit(LED2);
STM_EVAL_LEDInit(LED3);
STM_EVAL_LEDInit(LED4);
while (1)
{
STM_EVAL_LEDOn(LED1);
// 原始值 = 0xAFFFF,但是當代碼在外部RAM運行時,效率很低,會延遲10秒以上,而到代碼在內(nèi)部RAM或內(nèi)部Flash執(zhí)行時,速度很快,小于100ms
Delay(0xAFFFF);
// Turn on LD2 and LD3
STM_EVAL_LEDOn(LED2);
STM_EVAL_LEDOn(LED3);
// Turn off LD1
STM_EVAL_LEDOff(LED1);
// Insert delay
Delay(0xAFFFF);
// Turn on LD4
STM_EVAL_LEDOn(LED4);
//Turn off LD2 and LD3
STM_EVAL_LEDOff(LED2);
STM_EVAL_LEDOff(LED3);
//Insert delay
Delay(0xAFFFF);
//Turn off LD4
STM_EVAL_LEDOff(LED4);
}
}
void RCC_Configuration(void)
{
// 建立MCU系統(tǒng),初始化嵌入式FLASH接口,初始化鎖相環(huán)(附注1)和系統(tǒng)頻率參數(shù)
SystemInit();
}
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
#ifdef USE_FULL_ASSERT
// @brief Reports the name of the source file and the source line number
// where the assert_param error has occurred.
//@param file: pointer to the source file name
// @param line: assert_param error line source number
// @retval None
void assert_failed(uint8_t* file, uint32_t line)
{
// User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line)
//Infinite loop
while (1)
{
}
}
#endif
//******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****
void SystemInit (void)在system_stm32f10x.c中:
void SystemInit (void)
{
// 復位RCC時鐘配置到默認狀態(tài)(用于調(diào)試)
// Set HSION bit
RCC->CR |= (uint32_t)0x00000001;
//Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif //STM32F10X_CL
// Reset HSEON, CSSON and PLLON bits
RCC->CR &= (uint32_t)0xFEF6FFFF;
// Reset HSEBYP bit
RCC->CR &= (uint32_t)0xFFFBFFFF;
//Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits
RCC->CFGR &= (uint32_t)0xFF80FFFF;
#ifdef STM32F10X_CL
//Reset PLL2ON and PLL3ON bits
RCC->CR &= (uint32_t)0xEBFFFFFF;
//Disable all interrupts and clear pending bits
RCC->CIR = 0x00FF0000;
// Reset CFGR2 register
RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)
// Disable all interrupts and clear pending bits
RCC->CIR = 0x009F0000;
//Reset CFGR2 register
RCC->CFGR2 = 0x00000000;
#else
// Disable all interrupts and clear pending bits
RCC->CIR = 0x009F0000;
#endif // STM32F10X_CL
#if defined (STM32F10X_HD) || (defined STM32F10X_XL)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif // DATA_IN_ExtSRAM
#endif
//配置系統(tǒng)時鐘頻率,HCLK, PCLK2 和 PCLK1 的預分頻
//配置Flash延遲周期,使能預存取緩沖區(qū)
SetSysClock();
}
再次總結(jié)一下GPIO的配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//
(1) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B |C, ENABLE):使能APB2總線外設時鐘
(2) RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):釋放GPIO復位
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD; //開漏輸出
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; //50M時鐘速度
//gpio A組中的哪些引腳,什么模式 速度
typedefstruct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
typedef enum
{ GPIO_Mode_AIN =0x0, //模擬輸入
GPIO_Mode_IN_FLOATING =0x04, //浮空輸入
GPIO_Mode_IPD =0x28, //下拉輸入
GPIO_Mode_IPU =0x48, //上拉輸入
GPIO_Mode_Out_OD =0x14, //開漏輸出
GPIO_Mode_Out_PP =0x10, //推挽輸出
GPIO_Mode_AF_OD =0x1C, //開漏復用功能
GPIO_Mode_AF_PP =0x18 //推挽復用功能
}GPIOMode_TypeDef;
庫寫的相當嚴謹 使用了枚舉,也可見IO 的功能之多性能之強~!
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化IO口配置結(jié)束。
附注1:PLL(Phase Locked Loop): 為鎖相回路或鎖相環(huán),用來統(tǒng)一整合時脈訊號,使內(nèi)存能正確的存取資料。PLL用于振蕩器中的反饋技術(shù)。許多電子設備要正常工作,通常需要外部的輸入信號與內(nèi)部的振蕩信號同步,利用鎖相環(huán)路就可以實現(xiàn)這個目的。
附注2:STM32的GPIO口的輸出:開漏輸出和推挽輸出
1、推挽輸出與開漏輸出的區(qū)別:
>>推挽輸出:可以輸出高,低電平,連接數(shù)字器件
>>開漏輸出:輸出端相當于三極管的集電極. 要得到高電平狀態(tài)需要上拉電阻才行. 適合于做電流型的驅(qū)動,其吸收電流的能力相對強(一般20ma以內(nèi)).
推挽結(jié)構(gòu)一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止.
要實現(xiàn) 線與 需要用OC(open collector)門電路.是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關(guān)管每次只有一個導通,所以導通損耗小,效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。
當端口配置為輸出時:
開漏模式:輸出 0 時,N-MOS 導通,P-MOS 不被激活,輸出0。
輸出 1 時,N-MOS 高阻, P-MOS 不被激活,輸出1(需要外部上拉電路),也就是說此模式下只有N-MOS對輸出起作用;此模式可以把端口作為雙向IO使用。
推挽模式:輸出 0 時,N-MOS 導通,P-MOS 高阻,輸出0。
輸出 1 時,N-MOS 高阻,P-MOS 導通,輸出1(不需要外部上拉電路)。
簡單來說,開漏是0的時候接GND ,1的時候浮空;推挽是0的時候接GND ,1的時候接VCC。
2、開漏電路特點及應用
在電路設計時我們常常遇到開漏(open drain)和開集(open collector)的概念。所謂開漏電路概念中提到的“漏”就是指MOSFET的漏極。同理,開集電路中的“集”就是指三極管的集電極。開漏電路就是指以MOSFET的漏極為輸出的電路。一般的用法是會在漏極外部的電路添加上拉電阻。完整的開漏電路應該由開漏器件和開漏上拉電阻組成。
組成開漏形式的電路有以下幾個特點:
1) 利用 外部電路的驅(qū)動能力,減少IC內(nèi)部的驅(qū)動。當IC內(nèi)部MOSFET導通時,驅(qū)動電流是從外部的VCC流經(jīng)R pull-up ,MOSFET到GND。IC內(nèi)部僅需很下的柵極驅(qū)動電流。
2) 可以將多個開漏輸出的Pin,連接到一條線上。形成 “與邏輯” 關(guān)系。當PIN_A、PIN_B、PIN_C任意一個變低后,開漏線上的邏輯就為0了。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。
3)可以利用改變上拉電源的電壓,改變傳輸電平。IC的邏輯電平由電源Vcc1決定,而輸出高電平則由Vcc2決定。這樣我們就可以用低電平邏輯控制輸出高電平邏輯了。
4)開漏Pin不連接外部的上拉電阻,則只能輸出低電平(因此對于經(jīng)典的51單片機的P0口而言,要想做輸入輸出功能必須加外部上拉電阻,否則無法輸出高電平邏輯)。
5)標準的開漏腳一般只有輸出的能力。添加其它的判斷電路,才能具備雙向輸入、輸出的能力。
應用中需注意:
1) 開漏和開集的原理類似,在許多應用中我們利用開集電路代替開漏電路。例如,某輸入Pin要求由開漏電路驅(qū)動。則我們常見的驅(qū)動方式是利用一個三極管組成開集電路來驅(qū)動它,即方便又節(jié)省成本。
2)上拉電阻R pull-up的 阻值 決定了 邏輯電平轉(zhuǎn)換的沿的速度 。阻值越大,速度越低功耗越小。反之亦然。
Push-Pull輸出就是一般所說的推挽輸出,在CMOS電路里面Push-Pull輸出更合適,因為在CMOS里面的push-pull輸出能力不可能做得雙極那么大。輸出能力看IC內(nèi)部輸出極N管P管的面積。和開漏輸出相比,push-pull的高低電平由IC的電源決定,不能簡單的做邏輯操作等。 push-pull是現(xiàn)在CMOS電路里面用得最多的輸出級設計方式。
3、什么是OC、OD
集電極開路門(集電極開路 OC 或源極開路OD)
open-drain是漏極開路輸出的意思,相當于集電極開路(open-collector)輸出,即ttl中的集電極開路(oc)輸出。一般用于線或、線與,也有的用于電流驅(qū)動。
open-drain是對mos管而言,open-collector是對雙極型管而言,在用法上沒啥區(qū)別。
開漏形式的電路有以下幾個特點:
1)利用外部電路的驅(qū)動能力,減少IC內(nèi)部的驅(qū)動。 或驅(qū)動比芯片電源電壓高的負載.
2) 可以將多個開漏輸出的Pin,連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系。這也是I2C,SMBus等總線判斷總線占用狀態(tài)的原理。如果作為圖騰輸出必須接上拉電阻。接容性負載時,下降延是芯片內(nèi)的晶體管,是有源驅(qū)動,速度較快;上升延是無源的外接電阻,速度慢。如果要求速度高電阻選擇要小,功耗會大。所以負載電阻的選擇要兼顧功耗和速度。
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提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。
4、什么是線或邏輯與線與邏輯?
在一個結(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 邏輯, 或用負邏輯關(guān)系轉(zhuǎn)換與/或邏輯.
注:線或,接下拉電阻至地。(~A)+(~B)=~(AB);
這些晶體管常常是一些邏輯電路的集電極開路 OC 或源極開路 OD 輸出端. 這種邏輯通常稱為線與/線或邏輯, 當你看到一些芯片的 OC 或 OD 輸出端連在一起, 而有一個上拉電阻時, 這就是線或/線與了, 但有時上拉電阻做在芯片的輸入端內(nèi).
順便提示如果不是 OC 或 OD 芯片的輸出端是不可以連在一起的, 總線 BUS 上的雙向輸出端連在一起是有管理的, 同時只能有一個作輸出, 而其他是高阻態(tài)只能輸入.
5、什么是推挽結(jié)構(gòu)
一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止.要實現(xiàn)線與需要用OC(open collector)門電路 .如果輸出級的有兩個三極管,始終處于一個導通、一個截止的狀態(tài),也就是兩個三級管推挽相連,這樣的電路結(jié)構(gòu)稱為推拉式電路或圖騰柱(Totem- pole)輸出電路(可惜,圖無法貼上)。當輸出低電平時,也就是下級負載門輸入低電平時,輸出端的電流將是下級門灌入T4;當輸出高電平時,也就是下級負載門輸入高電平時,輸出端的電流將是下級門從本級電源經(jīng) T3、D1 拉出。這樣一來,輸出高低電平時,T3 一路和 T4 一路將交替工作,從而減低了功耗,提高了每個管的承受能力。又由于不論走哪一路,管子導通電阻都很小,使RC常數(shù)很小,轉(zhuǎn)變速度很快。因此,推拉式輸出級既提高電路的負載能力,又提高開關(guān)速度。供你參考。
推挽電路是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關(guān)管每次只有一個導通,所以導通損耗小效率高。
輸出既可以向負載灌電流,也可以從負載抽取電流。