根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。
输入模式
输入分为有数字输入与模拟输入,而数字输入又可以配置成三种输入模式——浮空、上拉、下拉。
当I/O端口配置为输入模式,内部电阻的连接也不同。
上拉输入
内部上拉电阻被连接,就是说上图上开关闭合,下开关断开,当外部没有输入电平时,端口会被拉到高电平。
下拉输入
下拉电阻被连接,当外部悬空,端口默认拉到低电平。
浮空输入
不连接内部电阻,端口状态不确定,由外部电路决定。
在不同输入模式下,输出缓冲寄存器被禁止。输入经施密特触发器处理更加稳定后再传到输入数据寄存器。
模拟输入
GPIO无效,引脚直接接入内部ADC。
输出模式
当端口配置成输出模式,输入依然有效。输出控制后接了两个MOS管,控制两个MOS管的通断来控制输出信号接到VDD/VSS。
推挽输出
- PMOS、NMOS均有效。高低电平均有较强驱动能力。
- 当输出数据寄存器为1,上管导通下管断开,输出与VDD直接连接,输出高电平。
- 当输出数据寄存器为0,上管断开下管导通,输出与VSS直接连接,输出低电平。
开漏输出
- PMOS不被激活,仅NMOS工作。
- 当输出数据寄存器为1,下管断开,输出为高阻状态。
- 当输出数据寄存器为0,下管导通,输出与VSS直接连接,输出低电平。
- 此模式只有低电平有驱动能力,高电平无。
- 可用于I2C通信,避免干扰。输出5V电平。
复用推挽\开漏输出
与普通推挽\开漏差不多,但引脚控制权交与片上外设。
GPIO库函数
初始化
当开启完时钟后,对GPIO初始化可以直接调用GPIO_Init()函数
可以看到GPIO_Init()有两个参数,第一个选用的IO口,第二个要结构体变量。
创建结构体变量:
首先定义一个结构体变量,然后再给结构体变量赋值。
也有结构体初始化函数,会给结构体变量赋默认值。
读取端口数值
设置端口值