stm32 GPIO 原理

数据手册,GPIO的原理图:

哪些gpio 可以容忍 5V :

这些 有FT标识 的 都是可以 容忍 5V的。

gpio 的模式:

输入浮空模式,  VDD, VSS 都断开, 通过肖基特触发器 到输入寄存器,到输入寄存器

这种模式 依然是再 从外界 拉电流 , 跟GPIO 什么都不接 还是不一样的。

输入上拉模式,VDD打开, VSS 断开, 通过肖基特触发器 到输入寄存器,到输入寄存器

输入下拉模式,VDD断开, VSS 打开, 通过肖基特触发器 到输入寄存器,到输入寄存器

模拟输入模式, VDD, VSS 都断开,肖基特触发器断开,到模拟输入。

这里就是 模拟的 电压(非电平), 输入到了 soc 的adc .

注意: 这里有一个 复用输入模式,也是需要打开肖基特触发器的,所以中断的话,要配置一下输入。

开漏输出模式,  位设置寄存器--->输入数据寄存器--->输出控制电路(0)-----> nmos 关闭------>io 浮空(要靠外部上拉电阻)

开漏输出模式,  位设置寄存器--->输入数据寄存器--->输出控制电路(1)-----> nmos 打开------>io 为低。

开漏复用模式,复用功能输出---->输出控制电路(0)-----> nmos 关闭------>io 浮空(要靠外部上拉电阻)

开漏复用模式,复用功能输出---->输出控制电路(1)-----> nmos 打开------>io 为低。

推挽输出模式, 位设置寄存器--->输入数据寄存器--->输出控制电路(0)-----> pmos关闭,nmos打开------->低电平。

推挽输出模式, 位设置寄存器--->输入数据寄存器--->输出控制电路(1)-----> pmos打开,nmos关闭------->高电平。

复用推挽输出模式, 复用输出--->输出控制电路(0)-----> pmos关闭,nmos打开------->低电平。

复用推挽输出模式, 复用输出--->输出控制电路(1)-----> pmos打开,nmos关闭------->高电平。

关于开漏输出,本身可以输出强 低电平,是不能输出高电平的,吸收电流的能力强,一般20ma以内,

那么要输出高电平 怎么办呢? 只能是 外部 接一个上拉电阻。

关于 GPIO的寄存器组。

一共多少个 gpio 数据手册中没有找到。

采用网上的截图,

大概也就是这样的。

没有GPIO 都有这些寄存器。

两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),

两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),

一个32位置位/复位寄存器(GPIOx_BSRR),

一个16位复位寄存器(GPIOx_BRR)

一个32位锁定寄存器(GPIOx_LCKR)

数据手册中就是这个。

首先是 GPIOx_CTL

我感兴趣的是这个。

GPIOx_IDR和GPIOx_ODR 没什么好说的。

GPIOx_LCKR  没有涉及到。

接下来就是这两个寄存器,他们的功能是有重叠的。

一个32位置位/复位寄存器(GPIOx_BSRR),

一个16位复位寄存器(GPIOx_BRR)

GPIOx_BSRR 包含了 GPIOx_BRR

一般使用是  GPIOx_BSRR  低16位+  GPIOx_BRR

截图如下:

他的意思就是,使用我这两个寄存器,你在软件上就不用 先读数据,再写数据了,直接就是 写数据。

为什么有 BSRR呢? 

比如说: 你想 设置 , ODR, 那么你要先读出来, 在设置,因为 你不知道 除了你要设置的位 ,其他的 位是 什么情况,所以 不能直接写。

但是 BSRR 就可以直接写, 其他的位 直接设置0 就可以了,因为 BSRR  为0 的位 根本不管。

GPIO的 复用与重映射。

复用不解释了。好理解。

重映射是从 功能的角度来说的,

举例:

PA9 , PA10 是gpio ,也可以复用成 uart1 对不对

那么 uart1 可以是 PA9,PA10, 也可以是PB9,PB10 .

这就是端口的重映射了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值