STM32學習筆記 GPIO介紹及配置

2021-10-04 16:45:44 字數 2738 閱讀 8401

僅供個人學習使用

stm32 的每個 io 埠都有 7 個暫存器來控制。分別是:

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

void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
這個函式有兩個引數,第乙個引數是用來指定 gpio,取值範圍為 gpioa~gpiog。第二個引數為初始化引數結構體指標,結構體型別為 gpio_inittypedef。其定義如下:

typedef struct

gpio_inittypedef;

結構體 gpio_initstructure 的第乙個成員變數 gpio_pin 用來設定是要初始化哪個或者哪些 io 口;第二個成員變數 gpio_mode 是用來設定對應 io 埠的輸出輸入模式,有八個可選值,在韌體庫中是通過列舉型別定義:

typedef enum 

gpiomode_typedef;

第三個引數是 io 口速度設定,有三個可選值,在 韌體庫中是通過列舉型別定義:

typedef enum 

gpiospeed_typedef;

初始化 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

上面**的意思是設定 gpiob 的第 5 個埠為推挽輸出模式,同時速度為 50m。

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

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

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

odr 是乙個埠輸出資料暫存器,只用了低 16 位。該暫存器為可讀寫,從該暫存器讀出來的資料可以用於判斷當前 io 口的輸出狀態。而向該暫存器寫資料,則可以控制某個 io 口的輸出電平。在韌體庫中設定 odr 暫存器的值來控制 io 口的輸出狀態是通過函式 gpio_write 來實現的:

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

bsrr 暫存器是埠位設定/清除暫存器。該暫存器和 odr 暫存器具有類似的作用,都可以用來設定 gpio 埠的輸出位是 1 還是 0。brr 暫存器是埠位清除暫存器。

在 stm32 韌體庫中,通過 bsrr 和 brr 暫存器設定 gpio 埠輸出是通過函式gpio_setbits()和函式 gpio_resetbits()來完成的。

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin); 

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin)

比如我們要設定 gpiob.5 輸出 1,那麼方法為:

gpio_setbits(gpiob, gpio_pin_5); 

或者gpiob->brr=gpio_pin_5;

反之如果要設定 gpiob.5 輸出位 0,方法為:

gpio_resetbits(gpiob, gpio_pin_5);

或者gpiob->bsrr=gpio_pin_5;

//使能 io 口時鐘。呼叫函式為rcc_apb2periphclockcmd()。 

gpio_inittypedef gpio_initstructure;

rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable);//使能gpioc

//初始化 io 引數。呼叫函式 gpio_init();

gpio_initstructure.gpio_pin = gpio_pin_5;

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpioc, &gpio_initstructure);

//操作 io。

cpio_setbits(gpioc,gpio_pin_5);輸出高

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...

stm32學習筆記之GPIO配置

1 gpio mode ain 模擬輸入 2 gpio mode in floating 浮空輸入 3 gpio mode ipd 下拉輸入 4 gpio mode ipu 上拉輸入 5 gpio mode out od 開漏輸出 6 gpio mode out pp 推挽輸出 7 gpio mod...