STM32學習筆記(二) GPIO口工作原理

2021-09-20 01:10:00 字數 2957 閱讀 9493

stm32每個io口具有7個暫存器來控制,每個io口都可以自由進行程式設計控制,我們程式設計實際上控制的是通過控制那7個暫存器來控制我們的io口,我們可以通過程式設計控制io口,把io口配置成如下八種模式:

1、輸入浮空2、輸入上拉3、輸入下拉4、模擬輸入5、開漏輸出

6、推挽輸出

7、推挽式復用功能

8、開漏復用功能

每個io口所對應的7個暫存器分別是:

1.crl和crh:均為32位暫存器

2.idr和odr:均為32位暫存器,但是只用到了低16位

3.brr:16位暫存器,用於復位

4.lckr:32位,鎖存暫存器

下面是stm32的埠配置表17,來自於《stm32中文參考手冊v10》:

以及表18,輸出模式位:

接下來我們看看埠低配置暫存器crl的描述,如圖所示:

crh 的作用和 crl 完全一樣,只是 crl 控制的是低 8 位輸出口,而 crh 控制的是高 8位輸出口。

在韌體庫開發中,操作暫存器 crh 和 crl 來配置 io 口的模式和速度是通過 gpio 初始化函式完成:

void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
第乙個引數是用來指定 gpio,取值範圍為 gpioa~gpiog。

第二個引數為初始化引數結構體指標,結構體型別為 gpio_inittypedef

初始化 gpio 的常用格式是:

gpio_inittypedef gpio_initstructure;

gpio_initstructure.gpio_pin = gpio_pin_5; //led0-->pb.5 埠配置

gpio_initstructure.gpio_mode = gpio_mode_out_pp; //推挽輸出

gpio_initstructure.gpio_speed = gpio_speed_50mhz;//速度 50mhz

gpio_init(gpiob, &gpio_initstructure);//根據設定引數配置 gpio

io 口速度設定,有三個可選值,在 mdk 中同樣是通過列舉型別定義:

typedef enum

gpiospeed_typedef;

模式則有8個可選.在mdk當中的定義如下:

typedef enum

gpiomode_typedef;

暫存器描述,如下圖所示:

這個暫存器用於檢視io口的電平狀態。

在韌體庫中操作 idr 暫存器讀取 io 埠資料是通過 gpio_readinputdatabit 函式實現的:

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin)
比如我要讀 gpioa.5 的電平狀態,那麼方法是:

gpio_readinputdatabit(gpioa, gpio_pin_5);
返回值是 1(bit_set)或者 0(bit_reset)

是乙個埠輸出資料暫存器,也只用了低 16 位,從該暫存器讀取資料可以用於判斷當前 io 口的輸出狀態。從該暫存器寫入資料可以用於判斷某個io口的輸出電平高低。其原理如下圖所示:

在韌體庫中設定 odr 暫存器的值來控制 io 口的輸出狀態是通過函式 gpio_write 來實現的:

void gpio_write(gpio_typedef* gpiox, uint16_t portval);
該函式一般用來往一次性乙個 gpio 的多個埠設值。

這個暫存器是埠位設定/清除暫存器,用來設定 gpio 埠的輸出位是 1 還是 0,和odr暫存器有著類似的作用。描述如下圖所示:

該暫存器通過舉例子可以很清楚了解它的使用方法。例如你要設定 gpioa 的第 1 個埠值為 1,那麼你只需要往暫存器 bsrr 的低 16 位對應位寫 1 即可:

gpioa->bsrr=1<<1;
如果你要設定 gpioa 的第 1 個埠值為 0,你只需要往暫存器高 16 位對應為寫 1 即可:

gpioa->bsrr=1<
該暫存器往相應位寫 0 是無影響的,所以我們要設定某些位,我們不用管其他位的值。

收藏

stm32學習1之GPIO口

ps 使用的32型號是.stm32f407zgt 原本我是不打算繼續更32的,但是最近的做的一些東西需要用到arm。所以想想就複習一下32吧!畢竟當初學的也確實不咋地。32系列我不會用很官方的話來講,我會用自己的理解最粗暴直白的表達出來。有什麼錯誤歡迎指正,企鵝 918619587 首先我們解釋一下...

stm32學習筆記 GPIO

2011 03 06 15 10 stm32基本上每個引腳都有8種配置模式 浮空輸入 帶弱上拉輸入 帶弱下拉輸入 模擬輸入 推挽輸出 開漏輸出 復用推挽輸出 復用開漏輸出 通常有5種方式使用某個引腳功能,它們的配置方式如下 1 作為普通gpio輸入 根據需要配置該引腳為浮空輸入 帶弱上拉輸入或帶弱下...

STM32學習筆記 GPIO

該微控制器在gpio功能方面有以下特點 1 4種輸入模式 gpio mode ain 模擬輸入 gpio mode in floating 浮空輸入 gpio mode ipd 下拉輸入 gpio mode ipu 上拉輸入 2 4種輸出模式 gpio mode out od 開漏輸出 gpio m...