1. 程式人生 > >STM32 (3) GPIO口功能講解 GPIO 口輸入輸出 暫存器配置 群號860099671

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

講解GPIO操作原理,使用各種型號的STM32 

開啟官方的《STM32中文參考手冊》8.1  8.2小節 

GPIO功能描述  我們今天重點要分析的是下圖

上圖是100腳的STM32微控制器 

1.  GPIO是包含引腳的

2. 如何找GPIO功能: 看資料手冊 在第3章   

我們要看GPIO口的功能就看這裡        在這個表裡面我們就能夠查詢到每一個GPIO口的功能

接下來我們要重點 

這裡分成7個部分

1.引腳進來有兩個保護二極體  作用:IO口電流輸入高於3.3v時,上流 (保護晶片)但是 如果輸入電壓大於VDD很多的話

微控制器還是會燒壞    舉個例子: IO口直接接電機的時候  電機啟動的時候會有反相電動勢 會有過沖(電壓很高),而且積分時間很短(二極體可能還沒有起到開關作用)那麼下圖電路也就沒有作用了,過沖電壓直接進入晶片內部而損壞,如果想接電機要經過電機驅動

                                                                             

2 推輓輸出

 比如說我們要配置成通用推輓輸出  也就是讓IO口輸出高電平或者低電平 配置這個時我們對應的是   埠配置低暫存器或者是埠配置高暫存器   每4個位控制一個GPIO    如果我們要配置成  推輓輸出  那麼

   MODE位配置為01(輸出速度10mhz)

  CNF位要設定為 00(根據MODE暫存器為推輓輸出)下面分析電路是如何實現輸出的?

輸出資料暫存器輸出  0/1 的時候  經過輸出控制   控制兩個MOS管  輸出0v 或者3.3V  

我們將上面的推輓輸出  簡化成下圖,  比如:ODR 暫存器 輸出了1   經過   反相器就 成了0, 0的話上面的MOS管導通(P-MOS)當  Ug<Us 時 P-MOS導通,那麼 OUT的電壓就是3.3V(與VDD相同) 此時  N-MOOS是截止的

推輓輸出:  為什麼叫推?為什麼叫挽?看電平方式,兩個MOS管是輪流導通的    推:灌電流  可以到25ma(mos管內阻小)

挽: 拉電流  

                                                       

下面介紹   開漏輸出   它輸出不了高電平,因為此時上面的P-MOS管不工作  此時,當ODR暫存器輸出高經過反相器變為0,N-MOS管截止, OUT引腳懸空   那麼如果要在 開漏模式下輸出高電平 就必須 藉助外部的上拉  電阻與電源相接  ,如果想驅動5V裝置就必須使VDD為5V.    一般用在I2C或者SMBus這類總線上

下面介紹一下埠輸出資料暫存器: 只有低16位有效  對應外部GPIO口的16個引腳,

寫1    GPIO引腳輸出高電平

寫0    GPIO引腳輸出低電平

我們想要操作GPIO的時候可以直接操作  ODR暫存器 或者可以操作  位設定和位清除暫存器(BSRR),但是最終 位設定和位清除暫存器還是寫入到ODR中,但是還是要看一下  設定和位清除暫存器 (BSRR)  ,這是一個32位暫存器,

低16位 用於置1   寫1有效寫0無效   

高16位 用於清0  寫1有效寫0無效    

還有一個埠位清除暫存器  

BRR暫存器的低16位相當於  BSRR暫存器的高16位    

還有複用功能 輸出,它就不經過 ODR BSRR 這些暫存器了而是來自   片上外設

 講完了  輸出 接下來我們講一講 輸入

 輸入有一個   輸入資料暫存器 IDR 也是隻有低16位有效

如果是0  表示外部的引腳輸入的是 0  如果是1 表示讀到的是 高電平

這裡還有一個 TTL肖特基觸發器 (也叫施密特觸發器) 比如:外部引腳中有一個3.3V的電壓或者0V電壓進來,可以通過開關配置為上啦輸入 或者 下拉輸入 這個對應埠配置暫存器。  肖特基開關的作用:外部的電平進來的是電壓,而我們的輸入資料暫存器只能讀取0或者1,這時施密特觸發器就把 輸入時的電壓       高於2.V的電壓就把他變為1  往IDR暫存器相應位寫1

 低於1.2V的時候是低電平(0)  往IDR暫存器相應位寫0

如果是複用功能輸入 就不進入 IDR暫存器了而是由  6進入到  複用功能輸入

如果是ADC採集的時候就不會經過 施密特觸發器了   如果是DAC的時候也不會經過 MOS管 而是直接輸出到引腳

下面我們來說一下GPIO口的初始化配置

相關推薦

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

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

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

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

STM32入門學習之GPIO(STM32F030F4P6基於CooCox IDE)(操作版)

依然,直接上程式碼 #include "stm32f0xx.h" #include "stm32_lib/inc/stm32f0xx_rcc.h" #include "stm32_lib/inc/stm32f0xx_gpio.h" int main(void) { /

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

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

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

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

大白帶你重玩STM32系列(三)------STM32的通用GPIO法操作)

轉載自—— 在上一講中,我們學習了MDK的安裝以及破解。這一講中,我們就開始認認真真的談一談,STM32可愛的GPIO口。 本文中,通過對點亮一個LED燈的操作,我們來講解一下,如何操作GPIO口。就像學各類軟體程式設計的同學們言必談HelloWorld一樣,學微控制器的

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

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

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

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

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中控制I/O

 引言    STM32的I/O口由軟體配置,有八種模式:輸入懸浮、輸入上拉、輸入下拉、模擬輸入、開漏輸出、推輓輸出、推輓式複用功能及開漏複用功能。 每個I/O口由7個暫存器控制,分別是: 模式

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

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

LCD控制器的原理及各功能的詳細講解

                                                                             LCD工作原理           如圖4-24 所示,LCD 的橫截面很像是很多層三明治疊在一起。每面最外一層是透明的玻璃基體,玻璃基體中間就是薄膜電晶

3線實現2路12位數碼管顯示不同值(STM32版本)

#include <stm32f10x_lib.h> #include "sys.h" #include "usart.h" #include "delay.h" #include "dis.h"                             unsi

STM32F407配置配置GPIO的例子)

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

STM32M3_GPIO&GPIO工作方式

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

3(記憶體訪問)小結

記憶體中字的儲存 字單元,即存放一個字形資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成。高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組。我們將起始地址為N的字單元簡稱為N地址字單元。   DS和[address] “[...]”表示一個記憶

STM32 地址名稱對映

stm32韌體庫內可以看見指向結構體的指標,其賦值如下: 例:GPIOA->ODR=0x00000000; 此句是為ODR暫存器賦值為0x00000000;    在stm32f10x.h檔案裡定義了以下結構體 typedef str

STM32 系列之 DAC 運用於理解

在這裡,我也不多BB,基本是看了原子的PDF之後,自己理解。所以可能比較簡略 單個DAC通道如下: VDDA 和VSSA為模擬電源端。   輸出電壓 = Vref+ * (DORx/2^n)          &

組合語言第3(記憶體訪問)

*****本章學習***** 3.1 字資料在記憶體中的儲存 (1)字單元,即存放一個字型資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成 (2)高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組 ps:這個知識點讓我想起了暫存器當中的高8位位元組和低8位

java基礎類庫學習(六.3)位元組流 字元流(輸入輸出

前言: 位元組流和字元流的操作方式幾乎相同,區別只是操作的資料單元不同而已 位元組流操作的資料單元是位元組8位,字元流操作的資料單元是字元16位 輸入流 字元輸入流/位元組輸入流原始碼(輸入流的抽象基類) InputStream public abstract class