一、GPIO(General Purpose Intput Output)通用输入输出口的结构介绍
1) 通用输入输出口的结构介绍![](https://img-blog.csdnimg.cn/92e5290240c743bfaa221fc47629461a.png)
IO保护二极管作用 :VDD接3.3v,当输入电压高于3.3v,电位高于VDD,电流从VDD流出,不流入电路,避免过高电压伤害电路从而保护电路。VSS接0v,当输入电压低于VSS电压,电压为相对于VSS的电压,所以存在负电压,电流从VSS流出IO口,所以保护内部电路无电流。
只有输入电压是0-3.3v才可以流入电路。这就是保护二极管的作用。
GPIO(General Purpose Intput Output)的输入
VDD闭合VSS断开为上拉输入模式
VSS闭合VDD断开为下拉输入模式
两个都断开则为浮空输入模式。
此电路的作用是给输入提供默认输入电平,因为如果输入IO口什么都不接,则电路处于浮空状态,引脚输入状态极易收到干扰改变,为了避免引脚悬空导致输入数据不确定。
图中肖特基触发器实际为施密特触发器,作用是对输入电压进行整形;执行逻辑为如果电压大于某一阈值,输出位高电平,电压小余某一阈值,输出位低电平。因为数字信号实际情况会产生失真,有电平波动,所以通过施发器密特触设置两个阈值:上限和下限,只有 高于上限或低于下限 才会发生电平变化,中间留有一定的变化范围,这样可以有效避免因为信号波动造成的输出抖动现象。
通过施密特触发器整形的波形可以写入输入数据寄存器。再用程序读取对应某一位数据就可以知道端口电平。
模拟输入是ADC功能的连接线。
复用功能输入是连接其他需要读取端口的外设的,例如串口。
二、GPIO(General Purpose Intput Output)的输出
数字部分由输出数据寄存器和片上外设部分控制,两种控制方式,通过数据选择器接到输出控制部分,输出数据寄存器是普通IO口输出,写某一位就可以操作某一位端口,位设置/清除寄存器是用来单独操作输出数据寄存器的某一位而不影响其他位的。因为输出寄存器只能控制16个端口,并且只能整体读写。如果想要控制单一端口而不影响其他端口,则需要用特殊操作方式。
通过位设置寄存器,如果要将某一位置1,则在位设置寄存器对应位写1,其他位写0,这样就会把写1的对应位置1,其他味不变。
如果要将某一位置0,则在位清除寄存器对应位写1,其他位写0,这样就会把写1的对应位置0,其他味不变。
另外还可以通过读写STM32当中的“位带”区域,作用类似于51单片机的位寻址。STM32中有一段地址区域,这段地址区域映射了所有的RAM、外设寄存器的所有位,读写这段地址中的数据,相当于读写所映射位置的某一位。
库函数是通过位设置/清除寄存器来实现位操作的。
2)GPIO口可以配置成八种模式使用
重点:
1、在输出模式下可以输入,但是在输入模式下不可以输出,因为一个端口只能有一个输出口,但是可以有多个输入口。
2、在模拟输入下会关闭其他输入输出口,在其他7个输入输出模式中,所有输入都是有效的。