STM32IO埠相關配置

2021-10-07 01:24:14 字數 3930 閱讀 6139

輸入浮空;

輸入上拉;

輸入下拉;

模擬輸入;

開漏輸出;

推挽輸出;

推挽輸出

推挽式復用輸出;

開漏復用功能;

i/o level 標 ft 的就是 5v 電平相容的 ;

2 個 32 位的埠配置暫存器 crl 和 crh;

2 個 32 位的資料暫存器 idr 和 odr;

1 個 32 位的置位/復位暫存器bsrr;

1個 16 位的復位暫存器 brr;

1 個 32 位的鎖存暫存器 lckr。

功能配置模式

cnf1

cnf0

pxodr暫存器

通用輸出

推挽式(push-pull)00

0或1通用輸出

開漏(open-drain)01

0或1復用功能輸出

推挽式(push-pull)10

不使用復用功能輸出

開漏(open-drain)11

不使用輸入

模擬輸入00

不使用輸入

浮空輸入01

不使用輸入

下拉輸入10

0輸入上拉輸入10

1mode1

mode0

意義模式00

保留輸入01

最大輸出速度為10mhz輸出1

0最大輸出速度為20mhz輸出1

1最大輸出速度為50mhz

輸出crl/crh暫存器值

功能使用

0x0模擬輸入模式

adc0x3

推挽輸出模式

輸出口,50m 速率

0x8上/下拉輸入模式

輸入口0xb

復用輸出

使用 io 口的第二功能, 50m 速

crh控制高8位i/o口,crl控制低8位i/o口。

gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);

上述函式有兩個引數:

第乙個用來指定gpio,取值範圍為gpioa~gpiog;

第二個用來初始化引數結構體(gpio_inittypedef)指標;

gpio_inittpyedef gpio_initstructure;

gpio_initstructure.gpio_pin = gpio_pin_5;

// 埠配置

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

//推挽輸出

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

//速度50mhz

gpio_init

(gpiob,

&gpio_initstructure)

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

typedef

enum

gpiomode_typedef;

typedef

enum

gpiospeed_typedef;

功能31:16

保留,始終為0

15:0

idry

yy[15:0]:埠輸入資料 (y

=0....15

y=0....15

y=0...

.15)

要想知道某個 io 口的電平狀態,只要讀這個暫存器,再看某個位的狀態就可以。

這些位只能以字(16位)的形式讀出。

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint6_t gpio_pin)

例如要讀gpioa.5的電平狀態:

gpio_readinputdatabit(gpioa, gpio_pin_5);

void gpio_write(gpio_typedef* gpiox, uint16_t portval);

只用了低 16 位;

從該暫存器讀出來的資料可以用於判斷當前 io 口的輸出狀態;

向該暫存器寫資料,則可以控制某個 io 口的輸出電平 ;

該函式一次性對乙個 gpio 的多個埠設值;

位31:16 bry: 清除埠x的位y(y=0…15),置1有效;

位15:0 bsy: 設定埠x的位y(y=0…15),置1有效;

若同時設定bsy和bry的對應位,bsy位起作用;

例如:要設定 gpioa 的第 1 個埠值為 1,則向bsrr 的低 16 位對應位寫 1 :

gpioa->bsrr=1<<1;

例如:要設定 gpioa 的第 1 個埠值為 0,則向bsrr 的高 16 位對應位寫 1 :

gpioa->bsrr=1<<(16+1)通過 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.5 輸出1:

gpio_resetits(gpiob, gpio_pin_5);

使能io口時鐘。呼叫函式為__rcc_apb2periphclockcmd();__

rcc_apb2periphclockcmd

(rcc_apb2periph_gpiob|

rcc_apb2periph_gpioe, enable)

;//使能 gpiob,gpioe 埠時鐘

初始化io引數。呼叫函式為__gpio_init();__

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;

gpio_init

(gpiob,

&gpio_initstructure)

;

操作io;

led0=1;

//通過位帶操作控制 led0 的引腳 pb5 輸出高電平

led0=0;

//通過位帶操作控制 led0 的引腳 pb5 輸出低電平

gpio_setbits

(gpiob, gpio_pin_5)

;//設定 gpiob.5 輸出 1,等同 led0=1;

gpio_resetbits (gpiob, gpio_pin_5)

;//設定 gpiob.5 輸出 0,等同 led0=0;

gpiob->brr=gpio_pin_5;

//設定 gpiob.5 輸出 1,等同 led0=1;

gpiob->bsrr=gpio_pin_5;

//設定 gpiob.5 輸出 0,等同 led0=0;

stm32 IO復用配置

gpio pinafconfig gpioa,gpio pinsource9,gpio af usart1 gpioa9usart1解析 gpio為埠a的基址 gpio pinsource9 為埠9 gpio af usart1 復用對映,巨集定義為 define gpio af usart1 ui...

stm32 io 口配置和使用

對於stm32 gpio的配置種類有8種之多 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...

STM32 I O復用功能時鐘配置

為了優化64腳或100 腳封裝的外設數目,可以把一些復用功能重新對映到其他引腳上。設定復用 重對映和除錯i o 配置暫存器 afio mapr 實現引腳的重新對映。這時,復用功能不再對映到它 們的原始分配上。需要用到外設的重對映功能時才需要使能afio的時鐘 外部中斷 exti 中與afio有關的暫...