STM32學習筆記——GPIO基本結構和工作方式介紹

  STM32F103RCT6一共有4組IO口,一共有16*3+3=51個IO口
   GPIOA0~A15
  GPIOB0~B15
  GPIOC0~C15
  GPIOD0~D2

一、GPIO 功能描述

  每個GPI/O端口有兩個32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個32位數據寄存器(GPIOx_IDR和GPIOx_ODR),一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。

STM32 的 IO 口可以由軟件配置成如下 8 種模式:
1、輸入浮空
2、輸入上拉
3、輸入下拉
4、模擬輸入
5、開漏輸出
6、推輓輸出
7、推輓式複用功能
8、開漏複用功能
  每個 IO 口可以自由編程,但 IO 口寄存器必須要按 32 位字被訪問。(不允許半字或字節訪問)。GPIOx_BSRR和GPIOx_BRR寄存器允許對任何GPIO寄存器的讀/更改的獨立訪問;這樣,在讀和更改訪問之間產生IRQ時不會發生危險。
在這裏插入圖片描述   VCC:C=circuit 表示電路的意思, 即接入電路的電壓;
  VDD:D=device 表示器件的意思, 即器件內部的工作電壓;
  VSS:S=series 表示公共連接的意思,通常指電路公共接地端電壓。
  對於數字電路來說,VCC是電路的供電電壓,VDD是芯片的工作電壓(通常Vcc>Vdd),VSS是接地點。例如,對於ARM單片機來說,其供電電壓VCC一般爲5V,一般經過穩壓模塊將其轉換爲單片機工作電壓VDD = 3.3V。
  TTL肖特基觸發器:將模擬信號轉化爲數字信號,這裏有一個閾值電壓的概念,比如從低到高達到多少纔會導通,從高到底多少纔會關閉。

二、GPIO工作方式(重要)

4種輸入模式:
   輸入浮空
   輸入上拉
   輸入下拉
   模擬輸入
4種輸出模式:
   開漏輸出
   開漏複用功能
   推輓式輸出
   推輓式複用功能
3種最大翻轉速度:
   -2MHZ
   -10MHz
   -50MHz

①輸入浮空模式(GPIO_Mode_IN_FLOATING)
在這裏插入圖片描述
  輸入浮空的時候走的是黃色的部分,順序爲①——④。再輸入浮空的時候上拉和下拉的兩個開關(即②和①之間的開關)是斷開的,輸入電平從①處輸入進去,經過施密特觸發器(這時施密特觸發器是打開的),電平直接傳到輸入數據寄存器,然後CPU就可以通過讀取輸入數據寄存器得到外部輸入電平的值。即在輸入浮空模式下,我們可以讀取外部的電平。
  輸入浮空一般多用於外部按鍵輸入,在浮空輸入狀態下,IO狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。

②輸入上拉(GPIO_Mode_IPU)
在這裏插入圖片描述
  輸入上拉和輸入浮空的區別就是上拉電阻(30-50K)是接通的。
  CPU通過讀取輸入數據寄存器的值來得到輸入高低電平的值。
  上拉電阻的目的是爲了保證在無信號輸入時輸入端的電平爲高電平,而在信號輸入爲低電平時輸入端的電平應該也爲低電平。如果沒有上拉電阻,在沒有外界輸入的情況下輸入端是懸空的,它的電平是未知的無法保證的,上拉電阻就是爲了保證無信號輸入時輸入端的電平爲高電平。

③輸入下拉(GPIO_Mode_IPD)
在這裏插入圖片描述
  輸入下拉就是下拉電阻是接通的。
  下拉電阻就是爲了保證無信號輸入時輸入端的電平爲低電平。

④模擬輸入(GPIO_Mode_AIN)
在這裏插入圖片描述
  將外部的模擬量轉換成數字量。外部的輸入是模擬的,將其轉換成數字量。 作爲模擬輸入一般是0-3.3v。
  應用於ADC模擬輸入,或者低功耗下省電。

⑤開漏輸出(GPIO_Mode_Out_OD)
在這裏插入圖片描述
       MOS管部分可看作如下電路:
在這裏插入圖片描述

  開漏輸出模式下,CPU可以寫寄存器(位設置/清除寄存器),比如寫1,最終會被映射到輸出數據寄存器,輸出數據寄存器連通的是輸出控制電路,如果我們的輸出是1,N-MOS管就處於關閉狀態(P-MOS從不被激活),這時IO端口的電平就不會由我們輸出的1來決定,因爲N-MOS管已經截止了,所以IO口的電平是由外部的上拉或下拉決定。在輸出模式下,輸出的電平也可以通過輸入電路讀取到輸入數據寄存器,然後被CPU讀取。

  所以,當我們輸出1時,我們讀取的輸出電平可能不是我們輸出的1,讀取的值是由外部的上拉或下拉決定的。當我們的輸出是0,這時N-MOS管處於開啓狀態,IO口的電平就會被N-MOS管拉到Vss,這時IO口的電平輸出就爲0,CPU通過輸入電路讀取IO口的電平也就爲0。

  輸出端相當於三極管的集電極。要得到高電平狀態需要上拉電阻纔行. 適合於做電流型的驅動,其吸收電流的能力相對強(一般 20mA以內)。
  開漏形式的電路有以下幾個特點:
  ①利用外部電路的驅動能力,減少 IC (集成電路)內部的驅動。當 IC 內部 MOSFET(金屬-氧化物半導體場效應晶體管,簡稱金氧半場效晶體管,可分爲“N型”與“P型”,通常又稱爲NMOSFET與PMOSFET,其他簡稱尚包括NMOS、PMOS) 導通時,驅動電流是從外部的VCC 流經 R pull-up(上拉電阻) ,MOSFET 到 GND。IC 內部僅需很下的柵極驅動電流。
  ②一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因爲開漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻。
  ③開漏輸出提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因爲上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。

⑥複用開漏輸出(GPIO_Mode_AF_OD)
在這裏插入圖片描述
  複用開漏輸出和開漏輸出的區別就是輸出1和0的來源不同,開漏輸出是由CPU寫入的,映射到輸出數據寄存器連通到輸出電路,而複用開漏輸出是由複用功能輸出決定的,即來自片上的外設,其他的地方都一樣。

  複用開漏輸出、複用推輓輸出可以理解爲GPIO口被用作第二功能時的配置情況(比如串口USART),即並非作爲通用IO口。

⑦推輓輸出(GPIO_Mode_Out_PP)
在這裏插入圖片描述
在這裏插入圖片描述

  推輓輸出控制輸出的寄存器和開漏輸出是一樣的,當輸出爲1,這時P-MOS管被導通,N-MOS管截止,輸出的1就被傳輸到IO端口,當輸出爲0,P-MOS管截止,N-MOS管導通,輸出的0就被傳輸到IO口。同樣,我們也可以通過輸入電路讀取IO口的輸出。
  推輓輸出:可以輸出高,低電平,連接數字器件; 推輓結構一般是指兩個三極管分別受兩互補信號的控制,總是在一個三極管導通的時候另一個截止。高低電平由 IC 的電源低定。
  推輓電路是兩個參數相同的三極管或 MOSFET, 以推輓方式存在於電路中, 各負責正負半周的波形放大任務, 電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。

⑧複用推輓輸出(GPIO_Mode_AF_PP)
在這裏插入圖片描述
  複用推輓輸出和推輓輸出的區別也輸出1和0的來源不同,其它的地方都一樣。
  複用開漏輸出、複用推輓輸出可以理解爲GPIO口被用作第二功能時的配置情況(比如說串口),即並非作爲通用IO口。

上電覆位後,GPIO默認爲浮空狀態,部分特殊功能引腳爲特定狀態。

復位後,JTAG引腳被置於輸入上拉或下拉模式:
  ─ PA15:JTDI置於上拉模式
  ─ PA14:JTCK置於下拉模式
  ─ PA13:JTMS置於上拉模式
  ─ PB4: JNTRST置於上拉模式
  當作爲輸出配置時,寫到輸出數據寄存器上的值(GPIOx_ODR)輸出到相應的I/O引腳。可以以推輓模式或開漏模式(當輸出0時,只有N-MOS被打開)使用輸出驅動器。輸入數據寄存器(GPIOx_IDR)在每個APB2時鐘週期捕捉I/O引腳上的數據。所有GPIO引腳有一個內部弱上拉和弱下拉,當配置爲輸入時,它們可以被激活也可以被斷開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章