1. 程式人生 > >STM32M3_GPIO暫存器&GPIO工作方式

STM32M3_GPIO暫存器&GPIO工作方式

STM32M3_GPIO暫存器&GPIO工作方式


STM32M3_GPIO暫存器

STM32F103ZET6中

一共有7IO口,每組IO口有16個IO,一共16X7=112個IO

GPIOA,GPIOB---GPIOG

每組IO口含下面7個暫存器。也就是7個暫存器,

一共可以控制一組GPIO16IO口。



每組GPIO埠的暫存器包括: 兩個32位配置暫存器(GPIOx_CRL GPIOx_CRH) 兩個32位資料暫存器 (GPIOx_IDRGPIOx_ODR) 一個32位置位/ 復位暫存器(GPIOx_BSRR) 一個16位復位暫存器(GPIOx_BRR) 一個
32位鎖定暫存器(GPIOx_LCKR) 每個I/O埠位可以自由程式設計,然而I/O埠暫存器必須按32位字被訪問(不允許半字或位元組訪問) 每組IO口含下面7個暫存器,一共可以控制一組GPIO16IO口。 - GPIOx_CRL :埠配置低暫存器 - GPIOx_CRH:埠配置高暫存器         - GPIOx_IDR:埠輸入暫存器         - GPIOx_ODR:埠輸出暫存器         - GPIOx_BSRR:埠位設定/清除暫存器         - GPIOx_BRR :埠位清除暫存器         - GPIOx_LCKR:埠配置鎖存暫存器 CRL/CRH 每四個位控制一個IO口,CRL控制標號0-7的口,CRL控制標號8-15的口!
GPIOx_CRL:

GPIOx_CRH:
GPIOx_IDR:
GPIOx_ODR:
GPIOx_BSRR:
GPIOx_BRR :
GPIOx_LCKR:


STM32M3_GPIO工作方式

一、推輓輸出:可以輸出高、低電平,連線數字器件;推輓結構一般是指兩個三極體分別受兩個互補訊號的控制,總是在一個三極體導通的時候另一個截止。高低電平由IC的電源決定。         推輓電路是兩個引數相同的三極體或MOSFET,以推輓方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。
推拉式輸出級既提高電路的負載能力,又提高開關速度。 二、開漏輸出:輸出端相當於三極體的集電極,要得到高電平狀態需要上拉電阻才行。適合於做電流型的驅動,其吸收電流的能力相對強(一般20mA以內)。開漏形式的電路有以下幾個特點: 1、利用外部電路的驅動能力,減少IC內部的驅動。當IC內部MOSFET導通時,驅動電流是從外部的VCC流經上拉電阻、MOSFET到GND。IC內部僅需很小的柵極驅動電流。         2、一般來說,開漏是用來連線不同電平的器件,匹配電平用的,因為開漏引腳不連線外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優點是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉換的速度。阻值越大,速度越低功耗越小,所以負載電阻的選擇要兼顧功耗和速度。)       3、開漏輸出提供了靈活的輸出方式,但是也有其弱點,就是帶來上升沿的延時。因為上升沿是通過外接上拉無源電阻對負載充電,所以當電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。        4、可以將多個開漏輸出連線到一條線上。通過一隻上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關係,即“線與”。可以簡單的理解為:在所有引腳連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當於接地,與之並聯的迴路“相當於被一根導線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結果才為邏輯1。     關於推輓輸出和開漏輸出,最後用一幅最簡單的圖形來概括:該圖中左邊的便是推輓輸出模式,其中比較器輸出高電平時下面的PNP三極體截止,而上面NPN三 極管導通,輸出電平VS+;當比較器輸出低電平時則恰恰相反,PNP三極體導通,輸出和地相連,為低電平。右邊的則可以理解為開漏輸出形式,需要接上拉。 三、浮空輸入:對於浮空輸入,一直沒找到很權威的解釋,只好從以下圖中去理解了
   由於浮空輸入一般多用於外部按鍵輸入,結合圖上的輸入部分電路,我理解為浮空輸入狀態下,IO的電平狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該埠的電平是不確定的。 四、上拉輸入/下拉輸入/模擬輸入:這幾個概念很好理解,從字面便能輕易讀懂。 五、複用開漏輸出、複用推輓輸出:可以理解為GPIO口被用作第二功能時的配置情況(即並非作為通用IO口使用) 六、總結在STM32中選用IO模式     1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1     2、帶上拉輸入GPIO_IPU——IO內部上拉電阻輸入     3、帶下拉輸入GPIO_IPD—— IO內部下拉電阻輸入     4、模擬輸入GPIO_AIN ——應用ADC模擬輸入,或者低功耗下省電     5、開漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模 式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能     6、推輓輸出GPIO_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的     7、複用功能的推輓輸出GPIO_AF_PP ——片內外設功能(I2C的SCL,SDA)     8、複用功能的開漏輸出GPIO_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS) 七、STM32設定例項:     1、模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然後可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);     2、如果是無上拉電阻,IO預設是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開漏輸出_OUT_OD; 八、通常有5種方式使用某個引腳功能,它們的配置方式如下:    1、作為普通GPIO輸入:根據需要配置該引腳為浮空輸入帶弱上拉輸入帶弱下拉輸入,同時不要使能該引腳對應的所有複用功能模組。    2、作為普通GPIO輸出:根據需要配置該引腳為推輓輸出開漏輸出,同時不要使能該引腳對應的所有複用功能模組。    3、作為普通模擬輸入:配置該引腳為模擬輸入模式,同時不要使能該引腳對應的所有複用功能模組。    4、作為內建外設的輸入:根據需要配置該引腳為浮空輸入帶弱上拉輸入帶弱下拉輸入,同時使能該引腳對應的某個複用功能模組。    5、作為內建外設的輸出:根據需要配置該引腳為複用推輓輸出複用開漏輸出,同時使能該引腳對應的所有複用功能模組。    注意如果有多個複用功能模組對應同一個引腳,只能使能其中之一,其它模組保持非使能狀態。比如要使用STM32F103VBT6的47、48腳的USART3功能,則需要配置47腳為複用推輓輸出或複用開漏輸出,配置48腳為某種輸入模式,同時使能USART3並保持I2C2的非使能狀態。如果要使用STM32F103VBT6的47腳作為TIM2_CH3,則需要對TIM2進行重對映,然後再按複用功能的方式配置對應引腳。
這裡摘抄百度知道內一段問答,幫助大家理解GPIO工作方式: STM32 各輸入輸出模式的區別,特點?怎麼樣判斷在什麼情況下用哪種輸入輸出方式呢? 諸司馬_計| 瀏覽 2407 次  2013-03-24 21:43 2013-03-25 00:39 最佳答案 *Input floating: 引腳懸空,就是沒有上拉也沒有下拉電阻的意思,針對外部有上拉器件使用,節省能耗,做AD輸入時也可以這樣設定。 *Input pull-up: 晶片輸入有內部有上拉電阻(電阻接VCC) *Input pull-down: 晶片輸入有內部下拉電阻(電阻接地) *Analog input: 模擬輸入,用於AD,比較器輸入(我理解是跟floating一樣,實際我沒有用到這個方式) *Output open-drain: 開漏輸出,類似三極體集電極引出,就是輸出沒有上拉電阻,要外部供電,否則輸出永遠是“0” 例如:你需要點亮一顆LED,LED正極串電阻連線到VCC,負極接IO口時使用開漏輸出 如果LED正極接IO,負極接地的話,這顆LED永遠也點不亮。 *Output push-pull: 推輓輸出,輸出引腳對VCC和對地各有一個MOS管,輸出電流較大。 比如IIC匯流排的CLK線就需要用到推輓輸出 追問 能在講講開漏輸出嗎?還是沒太搞懂~~~怎麼外部供電 追答 開漏就是MOS管的漏極是開路狀態,假設你對MOS管不是很熟,我就用三極體跟你說吧。 開漏好比NPN三極體的集電極是開路的,怎麼說呢,IC控制三極體基極,發射極接地,而把集電極空出來。 好了,你這時候給三極體基極加電,三極體導通了是不? 如果你在集電極接一個LED到電源負極,LED有可能亮嗎? 反過來,你的LED接在電源正極跟IO口上就不同了,基極給電讓三極體導通的時候,電源從正極到LED到IO口,由於三極體是導通的,你的LED就亮了,明白了嗎? 象LM393之類的比較器很多都是開漏輸出的,以後遇到此類應用的時候千萬要記住。

相關推薦

STM32M3_GPIO&GPIO工作方式

STM32M3_GPIO暫存器&GPIO工作方式 STM32M3_GPIO暫存器 STM32F103ZET6中 一共有7組IO口,每組IO口有16個IO,一共16X7=112個IO GPI

STM32 GPIO的8種工作模式及相關配置

GPIO八種工作模式四種輸入: GPIO_Mode_IPU(上拉輸入) GPIO_Mode_IPD(下拉輸入) 原理: 經過上拉開關和下拉開關的連線,再經過觸發器轉化為0,1的數字訊號,儲存到資料暫存器中,然後我們就可以通過配置暫存器CRL,CRH控制這兩個開關。 用法: 若

H3 GPIO 配置相關函式(ioremap iounmap)

對暫存器操作遵循一個原則:  讀------改 ------寫 1. 配置暫存器操作 (ioremap   //  iounmap)         #define BASE_

組合語言——彙編的8種定址方式,以及2個預設段

1.立即定址方式 MOV AH, 80H(直接給暫存器賦值)2. 暫存器定址方式(源或者目的有一個是暫存器) 2.1) 源運算元是暫存器定址方式 如:ADD VARD, EAX  ADD VARW, AX   MOV VARB, BH等。 其中:VARD、VARW和VARB是雙字,字和位元組

MIPS的、指令和定址方式的分類

MIPS的32個暫存器 助記符 編號 作用 zero 0 恆為0 at 1 (assembly temporary)保留給彙編器使用 v0,v1 2-3

運算元的定址方式間接,基址定址,間址定址,比例間接定址)

計算機中程式是由按一定順序排列的一系列指令,通常一條指令包括兩方面的內容:操作碼和運算元,操作碼決定要完成的操作,告訴計算機要幹什麼;運算元指參加運算的資料及其所在的單元地址。整條指令以二進位制編碼的形式存放在儲存器中。指令要進行操作,都有相應的資料參加,可是資

STM32 學習七 USART通訊2 方式程式設計

#include "stm32f10x_lib.h" #include <stdio.h> void RCC_Configuration(void); void GPIO_Configuration(void); void USART_Configuration(u32); void Delay_

專題2-我從內部看ARM-ARM工作模式+詳解

1、ARM家族大檢閱 1)名字歸類 (1)晶片: 2440(arm9核–採用ARMv4指令架構) 6410(arm11核–採用ARMv6指令架構) 210 (Cortex A8核–採用ARMv7指令架構)

通過/dev/mem實現使用者層訪問GPIO

由於工作需要用到GPIO設定成中斷模式,但是不知道連線是否已經連線到指定的GPIO引腳, 而且配置是否成功,因此通過/dev/mem來檢視GPIO的配置是否成功是必須的。 記錄一下: #include <stdio.h> #include <stdlib.h>

ARM的7種工作模式、37個通用、CPSR程式狀態

一、ARM 採用的是32位架構 1、ARM約定 Byte:8 bits Halfword:16 bits (2 byte) Word:32 bits (4 byte) 2、大部分ARM core 提供 ARM 指令集(32-bit) 每條指令都是4個位元組? Thumb

自己學驅動17——ARM工作模式和ARM9

1.ARM體系CPU的7種工作模式     (1)使用者模式(usr):ARM處理器正常的程式執行狀態。     (2)快速中斷模式(fiq):用於高速資料傳輸或通道處理。     (3)中斷模式(irq):用於通用的中斷處理。     (4)管理模式(svc):作業系統使

STM32F407配置(配置GPIO的例子)

在STM32F407中,有一個結構體控制引腳的高低電平:GPIOX(x∈(A, G) typedefstruct {   __IO uint32_t MODER;    /*!< GPIO port mode register,               Addre

C語言訪問MCU,有兩種方式可以採用!

微控制器的特殊功能暫存器SFR是SRAM地址已經確定的SRAM單元,在C語言環境下對其訪問歸納起

與七種定址方式

一、暫存器 總共有14個16位暫存器,8個8位暫存器。 通用暫存器:   資料暫存器:   AH(8位)  AL(8位)  AX(16位)   (AX和AL又稱累加器)   BH(8位)  BL(8位)  BX(16位)   (BX又稱基址暫存器,唯一作為儲

STM32學習筆記——GPIO之從庫函式到

/**   * @brief  Initializes the GPIOx peripheral according to the specified   *         parameters in the GPIO_InitStruct.   * @param  GPIOx: where x can 

STM32 (3) GPIO口功能講解 GPIO 口輸入輸出 配置 群號860099671

講解GPIO操作原理,使用各種型號的STM32  開啟官方的《STM32中文參考手冊》8.1  8.2小節  GPIO功能描述  我們今天重點要分析的是下圖 上圖是100腳的STM32微控制器  1.  GPIO是包含引腳的 2. 如何找GPIO功能:

微機原理 和七種定址方式

16位cpu 八個通用暫存器 指令指標IP 標誌暫存器FR 段暫存器 AX BX  CX DX BP SP SI DI 其中前四個又分為高八位和低八位 AX 累加器 BX 基址暫存器 CX 計數暫存器 DX 資料暫存器 BP 基址指標暫存器 SP 堆疊指標暫存器 

stm32學習筆記 F1系列GPIO相關的配置

對於stm32  F1系列每組GPIO埠的暫存器包括:GPIOx_CRL ,GPIOx_CRH,GPIOx_IDR,GPIOx_ODR,GPIOx_BSRR,GPIOx_BRR和GPIOx_LCKR七個暫存器 其中:  GPIOx_CRL為埠配置低暫存器; GPIOx_CR

STM32學習筆記(三)------GPIO的操作與使用

1、STM32 的每個 IO 埠都有 7 個暫存器來控制 (1)配置模式的 2 個 32 位的埠 配置暫存器 CRL 和 CRH (2)2 個 32 位的資料暫存器 IDR 和 ODR (3)1 個 32 位的置位/復位暫存器 BSRR (4)一個 16

stm32深入淺出——由GPIO談談配置

相信大家對GPIO的配置並不陌生,只需簡單的幾個庫函式就能完成。而本菜今天要講的不是怎麼用這些庫函式,而是要講講這些庫函式是怎麼工作的。本菜留意了下,無論是網上還是書籍,涉及這方面的知識很少,直接抄了使用手冊就上了。那麼本菜在這裡就詳細講一講,做些補充,希望能幫助到大家。