日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 嵌入式悅翔園
[導讀]GPIO全稱General Purpose Input Output即通用輸入/輸出,其實GPIO的本質就是芯片的一個引腳,通常在ARM中所有的I/O都是通用的。不過由于每個開發(fā)板上都會設計不同的外圍電路,這就造成GPIO的功能可能有所不同,大部分GPIO都是有復用功能的,比如有些GPIO可能是串口的TX或RX,也可能是I2C的SCL或SDA線。

一、前言

GPIO全稱General Purpose Input Output即通用輸入/輸出,其實GPIO的本質就是芯片的一個引腳,通常在ARM中所有的I/O都是通用的。不過由于每個開發(fā)板上都會設計不同的外圍電路,這就造成GPIO的功能可能有所不同,大部分GPIO都是有復用功能的,比如有些GPIO可能是串口的TX或RX,也可能是I2C的SCL或SDA線。

所以我們不僅要知道GPIO能夠輸出高低電平,還要理解為什么有些GPIO可以復用某些功能,而其他的不可以。

二、GPIO內部結構

我們在使用GPIO的時候可能不會去想為什么我們通過寫代碼或者操作寄存器就可以控制一個引腳的高低電平。

今天就讓我們一起來看看為什么我們通過操作寄存器(其實寫代碼的過程就是在操作寄存器)就能控制引腳輸入或者輸出。

我們想要想控制一個GPIO口的需要操作7個寄存器,分別是CRL,CRH,IDR,ODR,BRR,BSRR,LCKR我們對GPIO的操作本質上就是在對這些寄存器進行讀寫操作,以下是這些寄存器的名稱:

GPIOx_CRL(x = A..E)端口配置低寄存器 32位寄存器
GPIOx_CRH(x = A..E)端口配置高寄存器 32位寄存器
GPIOx_IDR(x = A..E)端口輸入數(shù)據(jù)寄存器 32位寄存器但僅用低16位
GPIOx_ODR(x = A..E)端口輸出數(shù)據(jù)寄存器 32位寄存器但僅用低16位
GPIOx_BRR(x = A..E)端口位清除寄存器 16位寄存器
GPIOx_BSRR(x = A..E)端口位設置/清除寄存器 16位寄存器
GPIOx_LCKR(x = A..E)端口配置鎖定寄存器 32位寄存器

我們首先分析上面的結構電路:

1、保護二極管: 保護二極管從它的名字就不難想到他是用來對系統(tǒng)進行保護的,通過兩個二極管的導通可以防止引腳外部輸入電壓過低或過高。當電壓過高時,上方的保護二極管導通。當電壓過低時,下方的二極管導通,防止不正常電壓導入到芯片內部造成芯片燒毀。

2、P·MOS管和N·MOS管: GPIO經(jīng)過兩個二極管的保護后向上流入輸入模式,向下流入輸出模式,而輸出模式的控制是由一個由P·MOS管和N·MOS管組成的單元電路,該電路主要是控制輸出的模式,由該結構狗策劃給你的單元電路具有推挽輸出開漏輸出兩種模式。

當系統(tǒng)配置為推挽輸出模式時:

  • 若向該結構中輸入高電平,經(jīng)過反向后,上方的P-MOS導通,下方的N-MOS關閉,對外輸出高電平;

  • 若向該結構中輸入低電平時,經(jīng)過反向后,下方的N-MOS管導通,上方的P-MOS關閉,對外輸出低電平。

  • 當引腳高低電平切換時,兩個MOS管輪流導通,P管負責灌電流,N管負責拉電流,使其負載能力和開關速度都比普通的方式有很大的提高。**推挽輸出的低電平為0V,高電平為3.3V**。

當系統(tǒng)配置為開漏輸出模式時:

  • 上方的P-MOS管完全不工作;

  • 如果我們控制輸出為0,低電平,則P-MOS管關閉,N-MOS管導通,使輸出接地;

  • 若控制輸出為1(它無法直接輸出高電平)時,則P-MOS管和N-MOS管都關閉,所以開漏輸出模式下引腳既不輸出高電平,也不輸出低電平,為高阻態(tài)。

推挽輸出模式一般應用在輸出電平為0和3.3V而且需要高速切換開關狀態(tài)的場合。開漏輸出模式一般應用在I2C、SMBUS通信等需要 線與功能的總線電路中

在單片機中除了必須用開漏模式的場合,一般習慣使用推挽輸出模式

3、輸出數(shù)據(jù)寄存器:前面我們知道雙了MOS管結構電路的輸入信號,是由GPIO輸出數(shù)據(jù)寄存器GPIOx_ODR提供的,因此我們可以通過修改輸出數(shù)據(jù)寄存器的值,就可以修改GPIO引腳的輸出電平。而置位/復位寄存器GPIOx_BSRR可以通過修改輸出數(shù)據(jù)寄存器的值,從而影響電路的輸出。

4、復用功能輸出:復用功能輸出中的復用是指STM32的其他片上外設對GPIO引腳進行控制,此時GPIO引腳用作該外設功能的一部分,算是第二用途。從其他外設引出來的復用功能輸出信號與GPIO本身的數(shù)據(jù)寄存器都連接到雙MOS管結構的輸入中。

三、輸入輸出模式

GPIO共有8中輸入輸出模式,分別是:上拉輸入、下拉輸入、浮空輸入、模擬輸入、開漏輸出、推挽輸出、開漏復用輸出、推挽復用輸出,下面我們詳細介紹以下上面的八種輸入輸出模式。

  • 上拉輸入: GPIO_Mode_IPU
  • 下拉輸入: GPIO_Mode_IPD
  • 浮空輸入: GPIO_Mode_IN_FLOATING
  • 模擬輸入: GPIO_Mode_AIN
  • 開漏輸出: GPIO_Mode_Out_OD
  • 推挽輸出: GPIO_Mode_Out_PP
  • 開漏復用: GPIO_Mode_AF_OD
  • 推完復用: GPIO_Mode_AF_PP

這里詳細講一下幾個常用的模式:

3.1 浮空輸入

浮空輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。也就是說,I/O的電平狀態(tài)是不確定的,完全由外部輸入決定;如果在該引腳懸空(在無信號輸入)的情況下,讀取該端口的電平是不確定的,通常用于IIC、USART等總線設備上。

3.2 上拉輸入模式

上拉輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平保持在高電平(并且在I/O端口輸入為低電平的時候,輸入端的電平也是低電平)

3.3 下拉輸入模式

下拉輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平保持在低電平;并且在I/O端口輸入為高電平的時候,輸入端的電平也是高電平。

3.4 模擬輸入模式

模擬輸入模式下,I/O端口的模擬信號(電壓信號,而非電平信號)直接模擬輸入到片上外設模塊,比如ADC模塊等。

3.5 開漏輸出模式

見上面二中的詳細介紹;

3.6 開漏復用輸出模式

開漏復用輸出模式,與開漏輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,取而代之利用片上外設模塊的復用功能輸出來決定的,一般用于片內外設功能:TX1,MOSI,MISO,SCK,SS

3.7 推挽輸出模式

見上面二中的詳細介紹;

3.8 推挽復用輸出模式

推挽復用輸出模式,與推挽輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,而是利用片上外設模塊的復用功能輸出來決定的,常見采用推挽輸出模式的一般為片內外設功能IIC的SCL、SDL。

四、開漏輸出和推挽輸出的區(qū)別

開漏輸出和推挽輸出模式的區(qū)別主要是開漏輸出只可以輸出強低電平,高電平得靠外部電阻拉高。輸出端相當于三極管的集電極,適合于做電流型的驅動,其吸收電流的能力相對強(一般20ma以內);推挽輸出可以輸出強高、低電平,連接數(shù)字器件。

五、STM32中GPIO的配置

在固件庫開發(fā)中,操作寄存器CRH和CRL來配置IO口的模式和速度是通過GPIO初始化函數(shù)完成:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); /*第一個參數(shù)是用來指定 GPIO,取值范圍為 GPIOA~GPIOG。
 *第二個參數(shù)為初始化參數(shù)結構體指針,結構體類型為 GPIO_InitTypeDef
 */ 

初始化 GPIO 的常用格式是:

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-- PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz GPIO_Init(GPIOB, GPIO_InitStructure);//根據(jù)設定參數(shù)配置 GPIO 

IO口速度設置有三個可選值:

typedef enum {

GPIO_Speed_10MHz,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz

}GPIOSpeed_TypeDef;

模式則有8個可選定義如下:

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;

六、總結

本文主要介紹了GPIO的定義和GPIO不同模式間的區(qū)別與實現(xiàn)方式,觀看完本文相信你對于GPIO會有一個更深的理解,我們如果是做軟件的可以不用太關注于GPIO是如何實現(xiàn)的,但是我們需要知道每個模式下GPIO的特點和應用場合,只有這樣我們在實際應用中才能更好的配置出最合適的那個。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉