GPIO內部結構、工作原理及相關寄存器詳解(以STM32為例)

2021-01-08 電子產品世界

  1. STM32實物圖:

本文引用地址:http://www.eepw.com.cn/article/201801/374607.htm

    

 

  2. STM32引腳分布圖:

    

 

  STM32F103ZET6:共144個引腳,7組IO口,每組16個IO口

  7*16=112個IO口(這7組IO口分別為GPIOA,GPIOB…GPIOG)

  例如:PGIOA包含PA0,PA1,PA2…PA15,每組16個IO口

  二,IO口的基本結構和工作方式

  1. STM32F1系列IO口的基本結構()IO口內部電路結構)

    

 

  右側I/O引腳部分為晶片暴露在外部的引腳

  每個引腳在數據手冊都有說明是否支持(識別))5V電壓

  三,PGIO的8種工作方式

  4種輸入模式

  輸入浮空

  輸入上拉

  輸入下拉

  模擬輸入

  4種輸出模式

  開漏輸出

  開漏復用功能

  推輓輸出

  推挽復用功能

  可配置3種最大翻轉速度

  2MHz

  10MHz

  50MHz

  四,八種工作方式講解

  1,GPIO輸入工作模式1-輸入浮空模式

    

 

  1)外部通過IO口輸入電平,外部電平通過上下拉部分(浮空模式下都關閉,既無上拉也無下拉電阻)

  2)傳輸到施密特觸發器(此時施密特觸發器為打開狀態)

  3)繼續傳輸到輸入數據寄存器IDR

  4)CPU通過讀輸入數據寄存器IDR實現讀取外部輸入電平值

  在輸入浮空模式下可以讀取外部輸入電平

  2,GPIO輸入工作模式2-輸入上拉模式

    

 

  和輸入浮空模式相比較,不同之處在於內部有一個上拉電阻連接到VDD(輸入上拉模式下,上拉電阻開關接通,阻值約30-50K)

  外部輸入通過上拉電阻,施密特觸發器存入輸入數據寄存器IDR,被CPU讀取

  3,GPIO輸入工作模式3-輸入下拉模式

    

 

  和輸入浮空模式相比較,不同之處在於內部有一個下拉電阻連接到VSS(輸入下拉模式下,下拉電阻開關接通,阻值約30-50K)

  外部輸入通過下拉電阻,施密特觸發器存入輸入數據寄存器IDR,被CPU讀取

  4,GPIO輸入工作模式4-輸入模擬模式

    

 

  上拉和下拉部分均為關閉狀態(AD轉換-模擬量轉換為數字量)

  施密特觸發器為截止狀態

  通過模擬輸入通道輸入到CPU

  IO口外部電壓為模擬量(電壓形式非電平形式),作為模擬輸入範圍一般為0~3.3V

  5,GPIO輸出工作模式1-開漏輸出模式

    

 

  1,CPU寫入位設置/清楚寄存器BSRR,映射到輸出數據寄存器ODR

  2,聯通到輸出控制電路(也就是ODR的電平)

  3,ODR電平通過輸出控制電路進入N-MOS管

  -ODR輸出1:

  N-MOS截止,IO埠電平不會由ODR輸出決定,而由外部上拉/下拉決定

  在輸出狀態下,輸出的電平可以被讀取,數據存入輸入數據寄存器,由CPU讀取,實現CPU讀取輸出電平

  所以,當N-MOS截止時,如果讀取到輸出電平為1,不一定是我們輸出的1,有可能是外部上拉產生的1

  -ODR輸出0:

  N-MOS開啟,IO埠電平被N-MOS管拉倒VSS,使IO輸出低電平

  此時輸出的低電平同樣可以被CPU讀取到

  6,GPIO輸出工作模式2-開漏復用輸出模式

    

 

  與開漏輸出模式唯一的區別在於輸出控制電路之前電平的來源

  開漏輸出模式的輸出電平是由CPU寫入輸出數據寄存器控制的

  開漏推輓輸出模式的輸出電平是由復用功能外設輸出決定的

  其他與開漏輸出模式相似:

  控制電路輸出為1:N-MOS截止,IO口電平由外部上拉/下拉決定

  控制電路輸出為0:N-MOS開啟,IO口輸出低電平

  7,GPIO輸出工作模式3-推輓輸出模式

    

 

  與開漏輸出相比較:

  輸出控制寄存器部分相同

  輸出驅動器部分加入了P-MOS管部分

  當輸出控制電路輸出1時:

  P-MOS管導通N-MOS管截止,被上拉到高電平,IO口輸出為高電平1

  當輸出控制電路輸出0時:

  P-MOS管截止N-MOS管導通,被下拉到低電平,IO口輸出為低電平0

  同時IO口輸出的電平可以通過輸入電路讀取

  8,GPIO輸出工作模式4-復用推輓輸出模式

    

 

  與推輓輸出模式唯一的區別在於輸出控制電路之前電平的來源

  開漏輸出模式的輸出電平是由CPU寫入輸出數據寄存器控制的

  開漏推輓輸出模式的輸出電平是由復用功能外設輸出決定的

  9,推輓輸出和開漏輸出的區別:

  推輓輸出:

  可以輸出強高/強低電平,可以連接數字器件

  開漏輸出:

  只能輸出強低電平(高電平需要依靠外部上拉電子拉高),適合做電流型驅動,吸收電流能力較強(20ma之內)

  五,STM32-IO口相關寄存器

  每組GPIO包含系列7個寄存器(7組GPIO共包含7*7=49個寄存器)

  兩個32位配置寄存器

  GPIOx_CRL 低16位

  GPIOx_CRH 高16位

  兩個32位數據寄存器

  GPIOx_IDR 輸入數據寄存器

  GPIOx_ODR 輸出數據寄存器

  一個32位置位/復位寄存器

  GPIOx_BSRR

  一個16位復位寄存器

  GPIOx_BRR

  一個32位鎖定寄存器

  GPIOx_LCKR

  六,STM32-IO口相關寄存器講解

  1,埠配置寄存器:

  STM32每組GPIO位16個IO口,每4位控制一個IO口,所以32位控制8個IO口

  分為低16位:GPIOx_CRL和高16位:GPIOx_CRH共32位控制一組GPIO的16個IO口

    

 

  如圖:以埠配置寄存器低16位為例,每四位控制一個IO口(高16位同理)

  MODEx的2位 : 配置IO口輸出/輸出模式(1種輸出+3種不同速度的輸出模式)

  CNFx的2位 : 配置IO口輸入/輸出狀態下(由MODEx控制)的輸入/輸出模式

  以GPIOA_CRL為例,配置IO口PA0 -> MODE0=00(輸入模式) CNF0=10(上拉/下拉輸入模式)

  此種配置下到底是上拉還是下拉輸入模式還需由ODR寄存器決定

    

 

  關於上拉/下拉的控制我們將在下面-數據寄存器-中介紹ODR輸出寄存器時詳細說明

  2,數據寄存器(以輸入數據寄存器GPIOx_IDR為例)

  每一組IO口都具有一個GPIOx_IDR的32位寄存器(實際只使用低16位,高16位保留),即16位控制16個IO口,每一位控制一個

    

 

  如圖:IDR寄存器共32位,0~15位代表一組IO口16個IO當前值

  這裡我們已經了解了輸入/輸出數據寄存器,現在說下上面提到的問題:

  當IO口配置為輸入模式且配置為上拉/下拉輸入模式(即MODEx=00 CNFx=10時),ODR決定到底是上拉還是下拉

  1)當輸出模式時,ODR為輸出數據寄存器

  2)當輸入模式時,ODR用作區分當前位輸入模式到底是上拉輸入(ODRx=0)還是下拉輸入(ODRx=1)

  3,埠位設置/清除寄存器(GPIOx_BSRR)

    

 

  BSRR寄存器作用:

  BSRR寄存器為32位寄存器,低16位BSx為設置為(1設置0不變),高16位BRx為重置位(1:清除0:不變)

  當然,最終的目的還是通過BSRR間接設置ODR寄存器,改變IO口電平

  4,埠位清除寄存器(GPIOx_BRR)

    

 

  GPIOx_BRR寄存器作用同GPIOx_BSRR寄存器高16位

  一般我們使用BSRR低16位和BRR的低16位(STM32F4系列取消了BSRR的高16位)

  5,鎖存寄存器:使用較少暫不分析

  七,埠的復用和重映射

  1,埠的復用:

  大部分IO口可復用為外部功能引腳,參考晶片數據手冊(IO口復用和重映射)

    

 

  例如:STM32F103ZET6的PA9和PA10引腳可復用為串口發送和接收功能引腳,也可復用為定時器1的通道2和通道3

  埠復用的作用:最大限度的利用埠資源

  2,埠的重映射:

    

 

  串口1默認引腳是PA9,PA10可以通過配置重映射映射到PB6,PB7

  埠重映射的作用:方便布線

  3,STM32所有的IO口都可作為中斷輸入(51單片機只有2個埠可以作為外部中斷輸入)

相關焦點

  • GPIO內部結構及工作原理
    例如:PGIOA包含PA0,PA1,PA2…PA15,每組16個IO口   二、IO口的基本結構和工作方式 1.STM32F1系列IO口的基本結構()IO口內部電路結構)    如圖:以埠配置寄存器低16位為例,每四位控制一個IO口(高16位同理) MODEx的2位 : 配置IO口輸出/輸出模式(1種輸出+3種不同速度的輸出模式)
  • STM32 GPIO工作原理及LED電路原理
    個IO口二、IO口的基本結構和工作方式1.STM32F1系列IO口的基本結構()IO口內部電路結構) 和輸入浮空模式相比較,不同之處在於內部有一個上拉電阻連接到VDD(輸入上拉模式下,上拉電阻開關接通,阻值約30-50K)外部輸入通過上拉電阻,施密特觸發器存入輸入數據寄存器IDR,被CPU讀取3,GPIO輸入工作模式3-輸入下拉模式
  • STM32的GPIO使用的函數剖析
    這個函數的實現是在Stm32f10x_gpio.c文件中,若要使用該函數在相應的應用程式的前面包含Stm32f10x_gpio.h頭文件。1、參數GPIO_TypeDef該函數的第一個參數為GPIO_TypeDef,它是一個結構體類型,該類型在Stm32f10x.h中被定義。
  • 【STM32】GPIO工作原理(八種工作方式分析,附電路圖)
    GPIO基本結構每個GPIO內部都有這樣的一個電路結構,這個結構在本文下面會具體介紹。但是儘管如此,還是不能直接外接大功率器件,須加大功率及隔離電路驅動,防止燒壞晶片或者外接器件無法正常工作。P-MOS管和N-MOS管:由P-MOS管和N-MOS管組成的單元電路使得GPIO具有「推輓輸出」和「開漏輸出」的模式。這裡的電路會在下面很詳細地分析到。TTL肖特基觸發器:信號經過觸發器後,模擬信號轉化為0和1的數位訊號。
  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    本文引用地址:http://www.eepw.com.cn/article/257110.htm11.3.1GPIO工作原理FS2410開發板的S3C2410處理器具有117個多功能通用I/O(GPIO)埠管腳,包括GPIO8個埠組,分別為
  • STM32關於GPIO的問題
    最佳答案:看了下datasheet,PB5復用的功能為PB5, ADC0, TIM2CLK, TIM1MSK,相關的中斷應該有,就看你配置為什麼外設了。6、STM32F101 Tamper Pin 使用問題問:請教各位大蝦:STM32F101 BKP當中的Tamper Pin該如何初始化!?
  • ucosii在stm32上的移植詳解1
    1.目標晶片;2.ucosii內核原理。 雖然我們移植的目標晶片是stm32,但作業系統的移植基本是針對Cortex-M3內核(以下簡稱CM3)而言的,所以我們只需了解CM3內核就好了。stm32晶片就是CM3內核加上各種各樣的外設。 怎麼才能了解CM3呢?
  • STm32驅動74HC595引腳圖時序圖工作原理
    74HC595管腳功能下面我來介紹一下 74HC595工作原理:74HC595的數據端:QA--QH: 八位並行輸出端,可以直接控制數碼管的8個段。QH': 級聯輸出端。我通常都選微秒級)    控制移位寄存器        SCK 上升沿 數據  移位        SCK 下降沿 數據  保持  RCK(12腳):上升沿時移位寄存器的數據進入存儲寄存器,下降沿時存儲寄存器數據不變。通常我將RCK置為低電平,當移位結束後,在RCK端產生一個正脈衝(5V時,大於幾十納秒就行了。我通常都選微秒級),更新顯示數據。
  • 關於stm32的GPIO的操作
    GPIOx_MODER:選擇I/O埠方向為 輸入/通用輸出/AF/模擬,復位狀態為輸入。GPIOx_OTYPER:選擇輸出類型為 推挽/開漏,復位狀態為推輓輸出。GPIOx_OSPEEDR:選擇I/O輸出驅動電路的響應速度為 低速/中速/快速/高速,用於噪聲控制。
  • Longan nano(GD32VF103)GPIO最小配置
    gd32vf103cbt6跟stm32的使用非常相似,如果使用C開發,基本上與指令集架構沒啥關係。本文介紹GPIO的最小配置,不使用sdk,直接操作寄存器,這樣可以更加直觀的了解晶片和外設。控制gpio就跟學程式語言列印hello world一樣,是開始學習新知識的第一步。
  • stm32 USART 串口通信操作寄存器+庫函數
    stm32的最多可以提供5路串口,有分數波特率發生器、支持同步單線通信和半雙工單線通信、具有DMA等。使用USART時,stm32的I/O口經RS232電平轉換電路 和電腦的串口連接。串口使用只需要開始串口時鐘,設置相應的I/O口模式,配置波特率、數據位長度、奇偶校驗位等信息就可以使用了。
  • 移位寄存器的特點_移位寄存器工作原理
    移位寄存器概要   在數字電路中,移位寄存器(英語:shiftregister)是一種在若干相同時間脈衝下工作的以觸發器為基礎的器件,數據以並行或串行的方式輸入到該器件中,然後每個時間脈衝依次向左或右移動一個比特,在輸出端進行輸出。
  • GPIO的上拉下拉功能說明
    當對應位為0時,設置對應引腳上拉使能,為1時,禁止對應引腳上拉使能。如果上拉寄存器使能,無論引腳功能寄存器如何設置(輸入,輸出,數據,中斷等),對應引腳輸出高電平。(使用arm彙編指令)實驗原理:在這裡點亮一個nLED_2,其對用的引腳是GPF5,在GPIO中,每個引腳對有配置寄存器和數據寄存器,對於本例其配置寄存器為GPFCON:0x56000050,和數據寄存器GPFDATA:0x56000054.要設置GPF5(GPF5為GPFCON的第十和十一引腳,【11,10】=01時為輸出)為輸出引腳,並根據電路原理圖,可知是設為低電平,才能點亮LED2.所以[0x56000050
  • 「正點原子Linux連載」第四十五章 pinctrl和gpio子系統實驗一
    ③、在②裡面將GPIO1_IO03這個PIN復用為了GPIO功能,因此需要設置GPIO1_IO03這個GPIO相關的寄存器,也就是GPIO1_DR和GPIO1_GDIR這兩個寄存器。對於我們使用者來講,只需要在設備樹裡面設置好某個pin的相關屬性即可,其他的初始化工作均由pinctrl子系統來完成,pinctrl子系統源碼目錄為drivers/pinctrl。
  • STM32開發板例程講解之二:GPIO的描述和配置
    上一講創建了一個stm32工程,從本講開始將深入stm32內核與外設講解。    首先介紹stm32的GPIO,這是入門的起點,也是最容易上手的部分。 一、GPIO的綜合描述stm32每一個GPIO埠擁有2個32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2個32bits的數據寄存器(GPIOx_IDR,GPIOx_ODR),1個32bits的set/reset寄存器(GPIOx_BSRR),1個16bits的reset寄存器(GPIOx_BRR
  • 8086/8088CPU的基本結構與其工作原理
    由於CPU是計算機系統中的核心部件,機器指令的執行是由它來完成的,因此,細化理解CPU的基本結構以及它的工作原理成為學習指令系統的基礎。本章將針對8086/8088CPU晶片,介紹其基本構成與工作原理,為學習下一章的80868088CPU指令系統做好準備。
  • GPIO子系統重要概念
    如果使用devm的相關函數,在內存申請失敗時可以直接返回:設備的銷毀函數會自動地釋放已經申請了的GPIO資源。建議使用「devm_」版本的相關函數。舉例,假設備在設備樹中有如下節點: foo_device { compatible = &34;; ...
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    STM32Snippets可翻譯為「代碼片段」、「裁剪」,其實他就是我們常說的「寄存器」開發STM32的底層驅動代碼。 STM32Snippets主要針對底層開發人員,或者從51轉過來,直接操作寄存器開發的人員。 是沒有經過封裝,可見底層寄存器的一套示例代碼。
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    STM32Snippets可翻譯為「代碼片段」、「裁剪」,其實他就是我們常說的「寄存器」開發STM32的底層驅動代碼。STM32Snippets主要針對底層開發人員,或者從51轉過來,直接操作寄存器開發的人員。 是沒有經過封裝,可見底層寄存器的一套示例代碼。每個STM32系列的100多個片段演示了如何以最小的內存佔用有效地使用STM32外圍設備。
  • IO埠映射和IO內存映射(詳解S3C24XX_GPIO驅動)
    好了,廢話也不多說了,這次,我就針對S3C24XX的gpio驅動程序來講解io埠的分配。1. 定義一些寄存器(數據寄存器,配置寄存器)2.在init函數中確定gpio基址前面我們寄存器的正常作用的前提就是gpio_va這個基址,所以我們在init函數中分配IO埠