STM32F4之GPIO的使用

2021-09-12 15:46:28 字數 3041 閱讀 2674

上次學stm32f103是在大二的暑假,學了一段時間之後也沒有專案做,漸漸地就轉向其他的方向,最近實習要用到stm32f407,就打算從頭學,但是一些基礎還在,並決定將學習的過程記錄一下,以備使用。

一.stm32f407zgt6的gpio資源介紹

stm32f407zgt6

- 一共有7組io口

- 每組io口有16個io

- 一共16x7=112個io

外加2個ph0和ph1

一共114個io口

二.gpio的相關暫存器

一組io口相關的暫存器有10個,也就是說,10個暫存器控制一組io口;

乙個埠模式暫存器(gpiox_moder)

乙個埠輸出型別暫存器(gpiox_otyper)

乙個埠輸出速度暫存器(gpiox_ospeedr)

乙個埠上拉下拉暫存器(gpiox_pupdr)

乙個埠輸入資料暫存器(gpiox_idr)

乙個埠輸出資料暫存器(gpiox_odr)

乙個埠置位/復位暫存器(gpiox_bsrr)

乙個埠配置鎖存暫存器(gpiox_lckr)

兩個復位功能暫存器(低位gpiox_afrl & gpiox_afrh)

三.gpio的配置流程

//宣告乙個gpio結構體變數

gpio_inittypedef gpio_initstructure;

delay_init(84);

//使能gpio所在的匯流排的時鐘

rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiof, enable);

//定義該結構體

gpio_initstructure.gpio_pin=gpio_pin_9 |gpio_pin_10;//使用的io口 (總共有16個io口)

gpio_initstructure.gpio_mode=gpio_mode_out; //設定io的模式

gpio_initstructure.gpio_speed=gpio_speed_100mhz; //100mhz

gpio_initstructure.gpio_otype=gpio_otype_pp; //推挽

gpio_initstructure.gpio_pupd=gpio_pupd_up; //上拉

//初始化該結構體

gpio_init(gpiof,&gpio_initstructure);

分析:   

(1) gpio的重要結構體,對其進行賦值

typedef struct

gpio_inittypedef;

( 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_mode_af_od 復用開漏輸出

( 8) gpio_mode_af_pp 復用推挽輸出

8種配置模式的使用場景

二.gpio的時鐘使能

時鐘使能的函式在stm32f4xx_rcc.h中,根據上圖,外設在哪一條時鐘匯流排上進行函式選擇,所以gpiof在ahb1匯流排上,此時選擇的函式為:

rcc_ahb1periphclockcmd();
四.gpio相關重要函式

重要函式:

1個初始化函式:

void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);

2個讀取輸入電平函式:

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);

uint16_t gpio_readinputdata(gpio_typedef* gpiox);

2個讀取輸出電平函式:

uint8_t gpio_readoutputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);

uint16_t gpio_readoutputdata(gpio_typedef* gpiox);

4個設定輸出電平函式:

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);

void gpio_writebit(gpio_typedef* gpiox, uint16_t gpio_pin, bitaction bitval);

void gpio_write(gpio_typedef* gpiox, uint16_t portval);

因此此時就可以用,以下函式進行點亮,熄滅led了

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);

具體**如下:

int main(void)

}

STM32F4學習筆記之GPIO輸入,按鍵檢測

說明 1.當按鍵沒按下時,pc13通過4.7k電阻接到地,此時為低電平,當按鍵按下時,pc13接到3.3v的vcc,此時電平為高,可以通過將i o埠配置為輸入狀態,通過讀取i o電平的高低狀態就可以知道按鍵的狀態。pa0同理。2.電容c62,c63是硬體消抖作用,但是還有軟體消抖,即配置乙個延時函式...

STM32F4的GPIO口配置模式

stm32f4 每組通用 i o 埠包括 4 個 32 位配置暫存器 moder otyper ospeedr 和 pupdr 2 個 32 位資料暫存器 idr 和 odr 1 個 32 位置位 復位暫存器 bsrr 1 個 32 位鎖定暫存器 lckr 和 2 個 32 位復用功能選擇暫存器 a...

STM32F4外部GPIO中斷源使用筆記

stm32f4有7個外部gpio中斷源,它們負責分配給每個組的gpio 15.0 對應關係為 外部中斷初始化順序為 gpio inittypedef gpio initstructure nvic inittypedef nvic initstructure exti inittypedef ext...