STM32 GPIO的操作(使用韌體庫)

2021-09-29 09:00:11 字數 2894 閱讀 6098

操作gpio口

第一次寫部落格,寫著玩玩。正好剛剛學32,寫寫對gpio韌體庫的學習心得

使能 io 口時鐘。呼叫函式 void rcc_apb2periphclockcmd(uint32_t rcc_apb2periph, functionalstate newstate)

void

rcc_apb2periphclockcmd

(uint32_t rcc_apb2periph, functionalstate newstate)

第乙個引數在庫函式中對gpio的定義有

#define rcc_apb2periph_gpioa             ((uint32_t)0x00000004)

#define rcc_apb2periph_gpiob ((uint32_t)0x00000008)

#define rcc_apb2periph_gpioc ((uint32_t)0x00000010)

#define rcc_apb2periph_gpiod ((uint32_t)0x00000020)

#define rcc_apb2periph_gpioe ((uint32_t)0x00000040)

#define rcc_apb2periph_gpiof ((uint32_t)0x00000080)

#define rcc_apb2periph_gpiog ((uint32_t)0x00000100)

第二個引數 可選擇disable 或 enable,設定是否使能io口

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

void

gpio_init

(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);

這個函式有兩個引數, 第乙個引數是用來指定 要初始化的gpio口,可取值 gpioa~gpiog。第二個引數為初始化引數結構體指標,該指標指向gpio_inittypedef結構體,我們可以在stm32f10x_gpio.c檔案中檢視該結構體的定義

typedef

struct

gpio_inittypedef;

結構體各變數的賦值範圍如下

gpio口引腳(0-15)

gpio口速度

typedef

enum

gpiospeed_typedef;

gpio口輸出模式

typedef

enum

gpiomode_typedef;

gpio_inittypedef gpio_initstructure;

gpio_initstructure.gpio_pin = gpio_pin_3;

//對pa.3 埠配置

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

//設定為推挽輸出

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

//設定速度 50mhz

gpio_init

(gpioa,

&gpio_initstructure)

;//根據設定引數配置 gpio

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

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin)

ps:讀取pa.3口狀態

uint8_t gpio_readinputdatabit(gpioa, gpio_3)

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

的:void gpio_write(gpio_typedef* gpiox, uint16_t portval);

ps:控制pa.3口為高電平

uint8_t gpio_readinputdatabit(gpioa, 0000000000000100)

該函式一般用於控制多個埠。

在 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)

ps:

設定 gpioa.3 輸出高電平:

gpio_setbits

(gpioa, gpio_pin_3)

;

反之如果要設定 gpioa.3 輸出位 低電平:

gpio_resetbits (gpioa, gpio_pin_3)

;

注:本文參考stm32庫函式中文參考手冊

STM32GPIO部分介紹

最近在老師交給了乙個專案,需要用到stm32微控制器,這裡就在學習的過程中所注意到的一些地方或細節部分記錄了下來,筆者所使用的是stm32f407zgt6晶元 探索者 檢視晶元的資料手冊 這個 對每個i o口的功能進行了很詳細的介紹。每個i o除了作為i o使用外,還可以作為其他的復用。已以pe2口...

STM32 GPIO模式總結

4種輸入模式 浮空輸入 上拉輸入 下拉輸入 模擬輸入 4種輸出模式 開漏輸出 復用開漏輸出 推挽輸出 復用推挽輸出 3種最大輸出速度 2mhz 10mhz 50mhz 浮空輸入模式 1 外部通過io口輸入電平,外部電平通過上下拉部分 浮空模式下都關閉,既無 上拉也無下拉電阻 2 傳輸到施密特觸發器 ...

STM32 GPIO簡單介紹

2018 3 28 stm32 1.簡單配置暫存器環境 2.ministm32f103rc 51個io口 1.擁有著4組io口 gpioa0 a15 gpiob0 b15 gpioc0 c15 gpiod0 d2 2.gpio的工作方式 四種輸入模式,四種輸出模式 輸入方式 1.輸入浮空模式 由引腳...