GPIO全稱General Purpose Input Output,即通用輸入/輸出。其實GPIO的本質(zhì)就是芯片的一個引腳。由于每個開發(fā)板上都會設計不同的外圍電路,這就造成了GPIO的功能可能有所不同。大部分GPIO都是有復用功能的,比如有些GPIO可能是串口的TX或RX,也可能是I2C的SCL或SDA線。
所以,我們不僅要知道GPIO能夠輸出高低電平,還要理解為什么有些GPIO可以復用某些功能,而其他的不可以。
一、GPIO內(nèi)部結構
我們在使用GPIO的時候,可能不會去想為什么通過寫代碼或者操作寄存器就可以控制一個引腳的高低電平。
今天就讓我們一起來看看,為什么通過操作寄存器(其實寫代碼的過程就是在操作寄存器)就能控制引腳輸入或者輸出。
我們想要想控制一個GPIO口的需要操作7個寄存器,分別是CRL,CRH,IDR,ODR,BRR,BSRR,LCKR我們對GPIO的操作本質(zhì)上就是在對這些寄存器進行讀寫操作,以下是這些寄存器的名稱:
首先,我們分析一下上面的結構電路。
1、保護二極管
保護二極管從它的名字就不難想到他是用來對系統(tǒng)進行保護的,通過兩個二極管的導通可以防止引腳外部輸入電壓過低或過高。當電壓過高時,上方的保護二極管導通。當電壓過低時,下方的二極管導通,防止不正常電壓導入到芯片內(nèi)部造成芯片燒毀。
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
下面,詳細講一下幾個常用的模式。
1、浮空輸入
浮空輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。也就是說,I/O的電平狀態(tài)是不確定的,完全由外部輸入決定;如果在該引腳懸空(在無信號輸入)的情況下,讀取該端口的電平是不確定的,通常用于IIC、USART等總線設備上。
2、上拉輸入模式
上拉輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平保持在高電平(并且在I/O端口輸入為低電平的時候,輸入端的電平也是低電平)。
3、下拉輸入模式
下拉輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平保持在低電平;并且在I/O端口輸入為高電平的時候,輸入端的電平也是高電平。
4、模擬輸入模式
模擬輸入模式下,I/O端口的模擬信號(電壓信號,而非電平信號)直接模擬輸入到片上外設模塊,比如ADC模塊等。
5、開漏輸出模式
見上面二中的詳細介紹。
6、開漏復用輸出模式
開漏復用輸出模式,與開漏輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,取而代之利用片上外設模塊的復用功能輸出來決定的,一般用于片內(nèi)外設功能:TX1,MOSI,MISO,SCK,SS。
7、推挽輸出模式
見上面二中的詳細介紹。
8、推挽復用輸出模式
推挽復用輸出模式,與推挽輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,而是利用片上外設模塊的復用功能輸出來決定的,常見采用推挽輸出模式的一般為片內(nèi)外設功能IIC的SCL、SDL。
三、開漏輸出和推挽輸出的區(qū)別
開漏輸出和推挽輸出模式的區(qū)別主要是開漏輸出只可以輸出強低電平,高電平得靠外部電阻拉高。輸出端相當于三極管的集電極,適合于做電流型的驅(qū)動,其吸收電流的能力相對強(一般20ma以內(nèi));推挽輸出可以輸出強高、低電平,連接數(shù)字器件。
四、STM32中GPIO的配置
在固件庫開發(fā)中,操作寄存器CRH和CRL來配置IO口的模式和速度是通過GPIO初始化函數(shù)完成:
初始化 GPIO 的常用格式是:
IO口速度設置有三個可選值:
模式則有8個可選定義如下:
五、總結
今天主要介紹了GPIO的定義,以及GPIO不同模式之間的區(qū)別與實現(xiàn)方式。相信看完本文,你會對GPIO有一個更深的理解。
如果是做軟件的小伙伴,可以不用太關注于GPIO是如何實現(xiàn)的,但是需要知道每個模式下GPIO的特點和應用場合。只有這樣,我們在實際應用中才能更好的配置出最合適的那個。
-
芯片
+關注
關注
456文章
51283瀏覽量
427817 -
GPIO
+關注
關注
16文章
1217瀏覽量
52441 -
低電平
+關注
關注
1文章
117瀏覽量
13355
原文標題:單片機入門有多簡單?帶你了解GPIO內(nèi)部電路及幾種常用模式
文章出處:【微信號:gh_a6560e9c41d7,微信公眾號:硬件筆記本】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
GPIO不同模式間的區(qū)別與實現(xiàn)方式
GPIO端口各種模式的區(qū)別
_pin和_gpio_port之間的區(qū)別是什么?
zynq中三種實現(xiàn)GPIO的方式
![zynq中三種<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>GPIO</b>的<b class='flag-5'>方式</b>](https://file.elecfans.com/web1/M00/59/38/o4YBAFtnxsSACA4vAARiPcULZmU157.png)
STM32的8種GPIO輸入輸出模式
![STM32的8種<b class='flag-5'>GPIO</b>輸入輸出<b class='flag-5'>模式</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
HAL庫的GPIO八種工作模式
![HAL庫的<b class='flag-5'>GPIO</b>八種工作<b class='flag-5'>模式</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
GPIO工作模式和寄存器
![<b class='flag-5'>GPIO</b>工作<b class='flag-5'>模式</b>和寄存器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
介紹GPIO的定義和GPIO不同模式間的區(qū)別與實現(xiàn)方式
![介紹<b class='flag-5'>GPIO</b>的定義和<b class='flag-5'>GPIO</b>不同<b class='flag-5'>模式</b>間的<b class='flag-5'>區(qū)別</b>與<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>方式</b>](https://file.elecfans.com/web2/M00/64/87/poYBAGMHTQCAOF3CAAD3PL0Qr7g780.png)
應用筆記|如何配置 S2-LP 的直接 GPIO 模式
![應用筆記|如何配置 S2-LP 的直接 <b class='flag-5'>GPIO</b> <b class='flag-5'>模式</b>](https://file1.elecfans.com/web2/M00/8E/5D/wKgZomTEzZqAUFgFAAApn8ZRvqM991.png)
GPIO的八種工作模式
![<b class='flag-5'>GPIO</b>的八種工作<b class='flag-5'>模式</b>](https://file1.elecfans.com/web2/M00/8B/E1/wKgaomShNfaALSKdAAAYtG72DoM576.jpg)
STM32使用GPIO配置的5種方式
STM32 GPIO八種模式及工作原理詳解
![STM32 <b class='flag-5'>GPIO</b>八種<b class='flag-5'>模式</b>及工作原理詳解](https://file1.elecfans.com/web2/M00/FD/9E/wKgZomadtqmANWVDAAAk9yCwOd4531.png)
評論