輸入浮空;
輸入上拉;
輸入下拉;
模擬輸入;
開漏輸出;
推挽輸出;
推挽輸出
推挽式復用輸出;
開漏復用功能;
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有關的暫...