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

2020-11-26 電子產品世界

  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相關寄存器配置詳解
    STM32F10x晶片的每個GPIO埠都有7個相關的寄存器:2個32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個32位數據寄存器(GPIOx_IDR,GPIOx_ODR),一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx 發表於 2020
  • GPIO內部結構及工作原理
    口   二、IO口的基本結構和工作方式 1.STM32F1系列IO口的基本結構()IO口內部電路結構)   )的輸入/輸出模式   以GPIOA_CRL為例,配置IO口PA0 -> MODE0=00(輸入模式) CNF0=10(上拉/下拉輸入模式)  此種配置下到底是上拉還是下拉輸入模式還需由ODR寄存器決定
  • STM32 GPIO工作原理及LED電路原理
    ,GPIOB…GPIOG)例如:PGIOA包含PA0,PA1,PA2…PA15,每組16個IO口二、IO口的基本結構和工作方式1.STM32F1系列IO口的基本結構()IO口內部電路結構) 右側I/O引腳部分為晶片暴露在外部的引腳每個引腳在數據手冊都有說明是否支持(識別
  • STM32 GPIO 相關寄存器(二)
    首先介紹一下基本的GPIO相關的寄存器:1,GPIOX_CRL 低8位埠配置寄存器這個寄存器主要是對配置管腳是輸入還是輸出:其中1)MODEy[1:0]主要是配置是輸入埠還是輸出埠的。配置為輸出得時候還可以配置輸出的管腳速度等級。
  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    所以通過對數據寄存器(PnDAT)的位讀寫,可以進行對每個埠的輸入或輸出。在此主要以發光二極體(LED)和蜂鳴器為例,討論GPIO設備的驅動程序。它們的硬體驅動電路的原理圖如圖11.4所示。這5個埠的數據流方向均為輸出。在表11.15中,詳細描述了GPF的主要控制寄存器。GPB的相關寄存器的描述與此類似,具體可以參考S3C2410處理器數據手冊。
  • STM32單片機GPIO寄存器
    另外,STM32的每個埠使用前都要將其時鐘使能,STM32的GPIO的時鐘統一掛接在APB2上,具體的使能寄存器為RCC_APB2ENR,該寄存器的第2位到第8位分別控制GPIOx(x=A,B,C,D,E,F,G)埠的時鐘使能,當外設時鐘沒有啟用時,程序不能讀出外設寄存器的數值,如打開PORTA時鐘: RCC-&
  • 【STM32】GPIO工作原理(八種工作方式分析,附電路圖)
    GPIO基本結構每個GPIO內部都有這樣的一個電路結構,這個結構在本文下面會具體介紹。但是儘管如此,還是不能直接外接大功率器件,須加大功率及隔離電路驅動,防止燒壞晶片或者外接器件無法正常工作。P-MOS管和N-MOS管:由P-MOS管和N-MOS管組成的單元電路使得GPIO具有「推輓輸出」和「開漏輸出」的模式。這裡的電路會在下面很詳細地分析到。TTL肖特基觸發器:信號經過觸發器後,模擬信號轉化為0和1的數位訊號。
  • FSMC驅動TFTLCD原理,時序和寄存器介紹
    這裡HADDR,是內部AHB地址總線 HADDR[25:0]來自外部存儲器地址FSMC_A[25:0],而HADDR[26:27]對4個區進行尋址。STM32F1的FSMC性能較低,即便設置為0,RD也有190ns高電平,所以設置為1     STM32F1設置為15注意:     如果未設置EXTMOD位,則讀寫共用FSMC_BTRx時序寄存器123456789101112131415161718193,SRAM/NOR快閃記憶體寫時序寄存器(FSMC_BWTRx)-寫時序控制ACCMOD[1:0]
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    STM32Snippets可翻譯為「代碼片段」、「裁剪」,其實他就是我們常說的「寄存器」開發STM32的底層驅動代碼。 STM32Snippets主要針對底層開發人員,或者從51轉過來,直接操作寄存器開發的人員。 是沒有經過封裝,可見底層寄存器的一套示例代碼。
  • STM32的GPIO工作原理(附電路圖詳細分析)
    STM32F103ZET6晶片為144腳晶片,包括7個通用目的的輸入/輸出口(GPIO)組,分別為GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同時每組GPIO口組有16個GPIO口。通常簡略稱為PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x為0-15。
  • avr單片機和stm32區別與優缺點分析
    avr單片機特點:   1. avr系列沒有類似累加器A的結構,它主要是通過R16~R31寄存器來實現A的功能。是沒有位操作,都是以字節形式來控制和判斷相關寄存器位的   2. C語言與51的C語言在寫法上存在很大的差異,這讓從開始學習51單片機的朋友很不習慣   3. 通用寄存器一共32個(R0~R31),前16個寄存器(R0~R15)都不能直接與立即數打交道,因而通用性有所下降。而在51系列中,它所有的通用寄存器(地址00~7FH)均可以直接與立即數打交道,顯然要優於前者。
  • 移位寄存器的特點_移位寄存器工作原理
    移位寄存器概要   在數字電路中,移位寄存器(英語:shiftregister)是一種在若干相同時間脈衝下工作的以觸發器為基礎的器件,數據以並行或串行的方式輸入到該器件中,然後每個時間脈衝依次向左或右移動一個比特,在輸出端進行輸出。
  • STM32學習筆記——使用函數庫編程控制GPIO口輸出
    看了網上許多人的代碼以及各類開發板所帶的例程,大多數使用的都是官方發布的函數庫來編程,通過查詢後發現,使用函數庫來編程可以簡化開發過程,並不需要追溯到各個寄存器,通過查看庫手冊,新手也可以快速應用STM32,因此
  • STM32教程(五)HAL庫之GPIO函數及實例詳細介紹!
    今天介紹STM32 HAL庫的GPIO函數庫,首先打開stm32f4xx_hal_gpio.h文件,我們能看到一些結構體定義以及GPIO引腳的地址定義等等,這些都很好理解,我們需要重點看HAL庫中GPIO的函數庫有哪些?以及這些函數庫有什麼作用以及怎麼使用這些函數?
  • 一文解析stm32產生spwm原理及程序
    SPWM法就是以該結論為理論基礎,用脈衝寬度按正弦規律變化而和正弦波等效的PWM波形即SPWM波形控制逆變電路中開關器件的通斷,使其輸出的脈衝電壓的面積與所希望輸出的正弦波在相應區間內的面積相等,通過改變調製波的頻率和幅值則可調節逆變電路輸出電壓的頻率和幅值。本文主要詳解stm32產生spwm原理及程序,首先來了解一下生成SPWM波的基理是什麼,具體得跟隨小編一起來了解一下。
  • ir2110中文資料詳解_引腳圖及功能_工作原理_內部結構及應用電路
    Nc(引腳14):空端 3、IR2110及相關型號封裝外形 二、ir2110中文資料詳解_ir2110內部結構 R2110的內部結構和工作原理框圖如圖所示。 三、ir2110中文資料詳解_ir2110工作原理 IR2110內部功能由三部分組成:邏輯輸入;電平平移及輸出保護。
  • 寄存器在CPU中是怎麼工作的,原理是什麼?
    接下就簡單介紹寄存器在處理器中是怎麼工作的?有些引腳用來將參與運算的數字輸送到處理器內部,有些引腳可以重複使用的。假如要進行加法運算,這些引腳將依次把加數和被加數送入處理器,處理器一旦接受信號,將會以二進位數組成的電信號反應在引腳相連的內部線路上,是一組高低電平的組合,代表著二進位數的每一位,此時必須用寄存器(Register)(是雙向器件)的暫時存儲,之所以這樣做,是因為相同的引腳和線路馬上要輸入被加數,重複之 圖2-2-1前的工作
  • 移位寄存器的工作原理是什麼?
    移位寄存器的工作原理是什麼? 佚名 發表於 2010-03-08 14:56:55 移位寄存器的工作原理是什麼?
  • Stm32的TFT LCD顯示器控制學習筆記
    目前常用的TFT液晶內部驅動晶片是ILI9320,ILI9325系列,內部原理基本一致,我用的是ILI9320。用stm32驅動液晶,實際上就是驅動ILI9320晶片。點亮TFT LCD的具體步驟有:(1)stm32與ILI9320晶片管腳的初始化。
  • 反應式步進電機的結構及工作原理詳解
    本文小編主要介紹的是反應式步進電機的結構及工作原理,以三相及四相反應式步進電機為例子詳細解說其工作原理。      反應式步進電機簡介  反應式步進電機,是一種傳統的步進電機,由磁性轉子鐵芯通過與由定子產生的脈衝電磁場相互作用而產生轉動。