数据手册,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 .
这就是端口的重映射了。