【STM32F407開發板用戶手冊】第15章 STM32F407的GPIO基礎知識(重要)


最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

第15章       STM32F407的GPIO基礎知識(重要)

本章教程為大家講解GPIO(General-purpose I/Os)基礎知識。GPIO配置是所有外設驅動的基礎,大家務必要熟練掌握。

15.1 初學者重要提示

15.2 GPIO功能簡介

15.3 GPIO功能模式分析(重要)

15.4 GPIO的拉電流負載和灌電流負載能力

15.5 IO補償單元,用於高速

15.6 GPIO兼容CMOS和TTL電平

15.7 不使用的引腳推薦設為模擬模式

15.8 總結

 

 

15.1 初學者重要提示

  1.   學習本章節務必要認真學習並掌握15.3小節GPIO功能模式分析,學好它們,對后續章節中外設的學習大有裨益。
  2.   對於不使用的引腳,推薦設置為模擬模式,懸空即可。
  3.   GPIO的速度等級高的時候,最好使能IO補償單元。
  4.   GPIO還涉及到一個注入電流的問題,此貼可以作為了解:http://www.armbbs.cn/forum.php?mod=viewthread&tid=87675

15.2 GPIO功能簡介

STM32F407的GPIO特性如下:

  •   輸出狀態:開漏/推挽 + 上拉/下拉電阻。
  •   通過輸出數據寄存器(GPIOx_ODR)或者外設(GPIO設置為復用模式時)輸出數據。
  •   GPIO速度等級設置。
  •   輸入狀態:浮空,上拉/下拉,模擬。
  •   通過輸入數據寄存器(GPIOx_IDR)或者外設(GPIO設置為復用模式)輸入數據。
  •   通過寄存器GPIOx_BSRR實現對寄存器GPIOx_ODR的位操作。
  •   通過配置寄存器GPIOx_LCKR的鎖機制,實現凍結IO口配置。
  •   每兩個時鍾周期就可以翻轉一次IO。
  •   高度靈活的引腳復用功能,允許IO引腳既可以做GPIO也可以做功能復用。

15.3 GPIO功能模式分析(重要)

STM32F4的GPIO端口可以配置為如下的8種模式:

  •   輸入浮空
  •   輸入上拉
  •   輸入下拉
  •   模擬功能
  •   具有上拉或下拉功能的開漏輸出
  •   具有上拉或下拉功能的推挽輸出
  •   具有上拉或下拉功能的復用功能推挽
  •   具有上拉或下拉功能的復用功能開漏

由於上拉和下拉是可選配置,對應的HAL庫配置使用下面6種就可以表示:

  •   GPIO_MODE_INPUT 輸入模式
  •   GPIO_MODE_OUTPUT_PP 推挽輸出
  •   GPIO_MODE_OUTPUT_OD 開漏輸出
  •   GPIO_MODE_AF_PP   復用推挽
  •   GPIO_MODE_AF_OD  復用開漏
  •   GPIO_MODE_ANALOG 模擬模式

15.3.1 推挽輸出

 

推挽電路是兩個參數相同的三極管或 MOSFET,以推挽方式存在於電路中。 電路工作時,兩只對稱的開關管每次只有一個導通,導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級提高電路的負載能力。 相對於開漏輸出模式,推挽輸出最大優勢是輸出高電平時,上升時間快,電壓驅動能力強。 

15.3.2 開漏輸出

 

開漏端相當於 MOS 管的漏極(三極管的集電極),要得到高電平狀態必須外接上拉電阻才行,因此輸出高電平的驅動能力完全由外接上拉電阻決定,但是其輸出低電平的驅動能力很強。開漏形式的電路有以下幾個特點:

  1. 輸出高電平時利用外部電路的驅動能力,減少 IC 內部的驅動。
  2. 開漏是用來連接不同電平的器件,匹配電平用的,因為開漏引腳不連接外部的上拉電阻時,只能輸出低電平。如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優點是通過改變上拉電源的電壓,便可以改變傳輸電平。上拉電阻的阻值決定了邏輯電平轉換的速度。阻值越大,速度越低,功耗越小。
  3. 開漏輸出提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。
  4. 可以將多個開漏輸出連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關系,即“線與”。可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯 0,相當於接地,與之並聯的回路“相當於被一根導線短路”,所以外電路邏輯電平便為 0,只有都為高電平時,與的結果才為邏輯 1。

15.3.3 復用推挽和開漏

復用指的是GPIO切換到CPU內部設備(比如SPI,I2C,UART等電路),也就是GPIO不是作為普通IO使用,是由內部設備直接驅動。推挽和開漏的特征同上。

15.3.4 四種輸入模式

 

通過上面的引腳結構圖可以得到如下三種方式

  •   浮空輸入:CPU內部的上拉電阻、下拉電阻均斷開的輸入模式。
  •   下拉輸入:CPU內部的下拉電阻使能、上拉電阻斷開的輸入模式。
  •   上拉輸入:CPU內部的上拉電阻使能、下拉電阻斷開的輸入模式。

 

而模擬輸入模式是GPIO引腳連接內部ADC。

 

15.4 GPIO的拉電流負載和灌電流負載能力

這里先普及點小知識,什么是拉電流負載,什么是灌電流負載。

  •   拉電流負載:一種負載電流從驅動門流向外電路,稱為拉電流負載。比如使用STM32F4的GPIO直接驅動LED就是拉電流形式。

 

  •   灌電流負載:負載電流從外電路流入驅動門,稱為灌電流負載。比如下面這種形式的LED驅動電路

 

有了上面這些知識后再來看STM32F407的IO驅動能力(截圖來自STM32F407數據手冊):

 

通過上面的截圖可知:STM32F407單個引腳的最大拉電流和灌電流不可超過25mA,這個知識點,大家要知道。

15.5 IO補償單元,用於高速

IO補償單元用於控制I/O通信壓擺率(tfall / trise)以此來降低I/O噪聲。當前STM32F4的速度等級可以配置為以下四種:

/** @defgroup GPIO_speed_define  GPIO speed define
  * @brief GPIO Output Maximum frequency
  * @{
  */  
#define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */
#define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */
#define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */
#define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */

不同的速度等級支持的最大時鍾速度可以看此貼:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94429

15.6 GPIO兼容CMOS和TTL電平

CMOS和TTL電平兼容問題也是一個比較重要的知識點,關於這方面的知識已經在論壇進行了總結(由於截圖較多,較長,就不整理到教程里面了):http://www.armbbs.cn/forum.php?mod=viewthread&tid=87676

 

15.7 不使用的引腳推薦設置為模擬模式

主要從功耗和防干擾考慮。

  •   所有用作帶上拉電阻輸入的 I/O都會在引腳外部保持為低時產生電流消耗。此電流消耗的值可通過使用的靜態特性中給出的上拉 / 下拉電阻值簡單算出。
  •   對於輸出引腳,還必須考慮任何外部下拉電阻或外部負載以估計電流消耗。
  •   若外部施加了中間電平,則額外的 I/O 電流消耗是因為配置為輸入的 I/O。此電流消耗是由用於區分輸入值的輸入施密特觸發器電路導致。除非應用需要此特定配置,否則可通過將這些I/O 配置為模擬模式以避免此供電電流消耗。 ADC 輸入引腳應配置為模擬輸入就是這種情況。
  •   任何浮空的輸入引腳都可能由於外部電磁噪聲,成為中間電平或意外切換。為防止浮空引腳相關的電流消耗,它們必須配置為模擬模式,或內部強制為確定的數字值。這可通過使用上拉 / 下拉電阻或將引腳配置為輸出模式做到。

 

綜上考慮,不使用的引腳設置為模擬模式,懸空即可。

15.8 總結

本章節就為大家講解這么多,其中GPIO功能模式小節(本章15.3)最重要,大家務必要掌握。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM