GPIO的内部结构和工作模式

参考链接已放至最上方,大家如果有疑惑也可直接观看参考链接。

[1]https://www.eefocus.com/component/405097/r0

[2]https://blog.csdn.net/techexchangeischeap/article/details/72569999

 

GPIO支持三种最大翻转速度:2MHz、10MHz、50MHz。每个I/O口可以自由编程,但I/O寄存器必须按32位字被访问。GPIO共有8种工作模式,通过编程选择相应的工作模式。

一、输入:

浮空输入、上拉输入、下拉输入、模拟输入 [1]

(一)浮空输入

1)外部通过IO口输入电平(上下拉电阻处于关闭状态)

2)传输到施密特触发器(此时施密特触发器为打开状态)

3)继续传输到输入数据寄存器IDR

4)CPU通过读输入数据寄存器IDR实现读取外部输入电平值

施密特触发器可以解决基本IO电路在读取外部信号的跳变沿时出现的抖动现象 [2]。浮空输入容易受外部噪声信号干扰,改变输入端检测到的电平 [2]。

(二)上拉输入

外部输入通过上拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取。

输入上拉模式有上拉电阻连接至VDD,上拉电阻开关接通,阻值约30-50K [1]。当输入管脚悬空时不受外部噪声信号干扰。对于此种输入方式,无论输入管脚悬空或者被高电平驱动时,读取的都是1。只有在输入端为0的时候,读取到的值才是0。因此采取的时非0输入模式。即若读取非0,即为1,若读取为0,即为0 [2]。

(三)下拉输入

与上拉模式相同,外部输入通过下拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取。

输入下拉模式有下拉电阻连接至VSS,下拉电阻开关接通,阻值约30-50K [1]。但是该电路对外呈现的不是高阻,某种意义上说也在向外输出,当外部驱动电路不同时可能出现错误的检测结果 [2]。

(四)模拟输入

此时,上下拉处于关闭状态。施密特触发器处于截止状态。通过模拟输入通道输入到CPU,IO口外部电压为模拟量(电压形式非电平形式),作为模拟输入范围一般为0~3.3V [1]。

二、输出:

推挽输出、开漏输出、推挽复用输出IO、开漏复用输出IO

(一)开漏输出

 

开漏输出即三极管的集电极或者MOS管的漏极进行输出。开漏输出可以实现线与功能。开漏输出只能输出强低电平,高电平需要依靠外部上拉电子拉高,适合做电流型驱动,吸收电流能力较强[1]。

1)CPU写入位设置/清楚寄存器BSRR,映射到输出数据寄存器ODR

2)联通到输出控制电路(也就是ODR的电平)

3)ODR电平通过输出控制电路进入N-MOS管

1、ODR输出0:

N-MOS截止,IO端口电平不会由ODR输出决定,而由外部上拉/下拉决定  

在输出状态下,输出的电平可以被读取,数据存入输入数据寄存器,由CPU读取,实现CPU读取输出电平  

所以,当N-MOS截止时,如果读取到输出电平为1,不一定是我们输出的1,有可能是外部上拉产生的1

2、ODR输出1:

N-MOS开启,IO端口电平被N-MOS管拉倒VSS,使IO输出低电平。此时输出的低电平同样可以被CPU读取到

(二)推挽输出

与开漏式输出不同,推挽式输出采用上图结构。推挽输出可以采取强高/强低输出,可以连接数字电路。[1-2]

但推挽输出的一个缺点是,如果当两个推挽输出结构相连在一起,一个输出高电平,即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小,会发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。[2]

(三)推挽复用输出IO

与推挽输出模式唯一的区别在于输出控制电路之前电平的来源,推挽输出模式的输出电平是由CPU写入输出数据寄存器控制的,推挽复用输出模式的输出电平是由复用功能外设输出决定的。其他与开漏输出模式相似。

(四)开漏复用输出IO

与开漏输出模式唯一的区别在于输出控制电路之前电平的来源。开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的,开漏复用输出模式的输出电平是由复用功能外设输出决定的。其他与开漏输出模式相似。

https://blog.csdn.net/qq_38410730/article/details/79858906

https://blog.csdn.net/huanggenda568/article/details/7723238

https://www.cnblogs.com/sky-heaven/p/8553951.html

https://wenku.baidu.com/view/b627eb2b482fb4daa58d4b80.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值