─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─
开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能
GPIO框图
保护电路:
高压保护——上拉二极管
低压保护——下拉二极管
输入:
模拟输入 ——不经过施密特触发器滤波
输入浮空
输入弱上拉——上拉电阻100K
输入弱下拉——下拉电阻100K
-
第一:浮空输入模式;在这张图上,阴影的部分处于不工作状态,尤其是下半部分的输出电路,实际上是与端口处于隔离状态。
黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的I/O端口进入STM32,经过编号2的施密特触发器的整形送入编号3的“输入数据寄存器”,在“输入数据寄存器”的另一端(编号4),CPU可以随时读出I/O端口的电平状态。
-
第二:输入上拉模式;与前面的浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,根据STM32的数据手册,这个上拉电阻阻值介于30K~50K欧姆。同样,CPU可以随时在“输入数据寄存器”的另一端,读出I/O端口的电平状态。
-
第三:输入下拉模式;数据通道的下部,接入了一个下拉电阻,根据STM32的数据手册,这个下拉电阻阻值也是介于30K~50K欧姆。
-
第四:模拟输入模式;信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块。这里我们看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此“输入数据寄存器”将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在“输入数据寄存器”上读到有效的数据。
输出 (弱上拉和下拉电阻被禁止)
开漏输出
推挽复用功能
开漏复用功能
-
第一:开漏输出模式;当CPU在左边的编号1端通过位设置/清除寄存器,或输出数据寄存器写入数据后,该数据位将通过编号2的输出控制电路传送到编号4的I/O端口,如果CPU写入的是逻辑“1”,则编号3的N-MOS管将处于关闭状态,此时I/O端口的电平将由外部的上拉电阻决定,如果CPU写入的是逻辑“0”,则编号3的N-MOS管将处于开启状态,此时I/O端口的电平被编号3的N-MOS管拉到了VSS的零电位。
在图的上半部,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控I/O端口的状态;通过这个特性,还实现了虚拟的I/O端口双向通信:只要CPU输出逻辑“1”,由于编号3的N-MOS管处于关闭状态,I/O端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1”。
-
第二:开漏复用输出模式;与开漏输出模式的配置基本相同,不同的是编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了。同样,CPU可以从“输入数据寄存器”读到外部电路的信号。
-
第三:推免输出模式;在开漏输出模式的基础上,推挽输出模式仅仅是在编号2的输出控制电路之后,增加了一个P-MOS管。
当输出逻辑“1”时,编号3处的P-MOS管导通,而下方的N-MOS管截止,达到输出高电平的目的。
当输出逻辑“0”时,编号3处的P-MOS管截止,而下方的N-MOS管导通,达到输出低电平的目的。
在这个模式下,CPU仍然可以从“输入数据寄存器”读到外部电路的信号。
-
第四:
推挽复用输出模式,同样的道理,编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了。
其它部分与前述模式一致,包括对“输入数据寄存器”的读取。
-