GPIO的八种模式以及配置

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

(5) 开漏输出 GPIO_Mode_Out_OD
(6) 开漏复用输出 GPIO_Mode_AF_OD
(7) 推挽输出 GPIO_Mode_Out_PP
(8) 推挽复用输出 GPIO_Mode_AF_PP

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

  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值