GPIO的八种模式以及配置

STM32的GPIO 有8种可能的配置:(4种输入+2种输出+2种复用输出)
(1) 浮空输入
(2) 带上拉输入
(3) 带下拉输入
(4) 模拟输入

(5) 开漏输出
(6) 开漏复用输出
(7) 推挽输出
(8) 推挽复用输出

1. 八种模式

1.1. 浮空输入

CPU可以随时读取IO口的电平状态,什么都不接,相当于高电平,很容易受干扰

1.2. 带上拉输入

CPU可以随时读取IO口的电平状态,
减少干扰.通过在数据通道上部,接入上拉电阻和电源VDD,钳位在高电平!电阻同时起限流作用

1.3. 带下拉输入

CPU可以随时读取IO口的电平状态,
减少干扰,通过在数据通道上部,接入下拉电阻和接地,钳位在低电平!电阻同时起限流作用

1.4. 模拟输入

前面三种都是数字信号输入,模拟输入与它们不同,
从IO口过来的模拟量要被ADC转换成数字量才能被CPU读取咯

1.5. 开漏输出(只用作输出低电平)

GPIO软件置0,且接地-------IO输出低电平

GPIO软件置1,不接上拉------IO悬空
GPIO软件置1,接上拉------IO输出高电平

CPU可以在"输入数据寄存器IDR"监控IO口的状态,因为IO口的信息反馈到CPU相当于输入CPU,所以是在"输入状态寄存器"查看

1.6. 开漏复用输出

GPIO口被用作第二功能时,比如用于片内外设功能(TX1,MOSI,MISO.SCK.SS)

1.7. 推挽输出(既可以输出低电平,也可以高电平)

GPIO软件置0,且接地-------IO输出低电平
GPIO软件置1,且接上拉------IO输出高电平

1.8. 推挽复用输出

GPIO口被用作第二功能时,比如用于片内外设功能(I2C的SCL,SDA)

2. GPIO的配置

模式的配置介绍:
一个IO口需要4个bit来控制:
CNF MODE CNF MODE
00 00 ~ 11 11
也就是十六进制的 0x 0 ~ 0x F

其中MODE是设置输入输出模式::
00:输入(复位后的状态)
01:输出,最大速度10MHz
10:输出,最大速度2MHz
11:输出,最大速度50MHz

而CNF是在MODE的基础上选择更细分的模式:
(1)当MODE为00,即输入模式下:
00:模拟输入
01:浮空输入
10:上拉/下拉输入
11:保留
(2)当MODE为01,10,11,即输出模式时:
00:推挽输出
01:开漏输出
10:复用推挽输出
11:复用开漏输出

3.软件配置的写法

端口配置寄存器(2个32位的寄存器):CRH,CRL
作用: 配置输入输出模式
按照每四个bit位,为1个IO口

CRH:负责8~15号IO端口
CRL:负责0~7号IO口

//软件配置的写法:
GPIOC->CRH &= 0xFFFFFFF0   //清除PC8的配置
GPIOC->CRH |= 0x00000008   //设置PC8为0x8,也就是bit的10 00,得出 上拉/下拉输入模式
//再通过
GPIO->ODR=1<<8 //得到上拉模式

数据寄存器(2个32位的寄存器):IDR,ODR
作用: 配置输入输出模式
按照每四个bit位,为1个IO口

IDR(端口输入数据寄存器,只读):只使用了低16位,读取IO口的输入状态,bit为1有输入,0无
ODR(端口输入数据寄存器,可写,不要读):只使用了低16位,bit写入1,IO口有输出,0则不输出

置位/复位寄存器(1个32位的寄存器):BSRR

复位寄存器(1个16位的寄存器):BRR

锁存寄存器(1个32位的寄存器):LCKR

你可能感兴趣的:(嵌入式C语言)