32单片机学习笔记----GPIO
1. GPIO是什么?有什么用?
- GPIO,General Purpose Input Output,通用输入输出端口
- 主要作用:
- 输入:读取外部设备状态,如开关是否按下,传感器是否响应等;
- 输出:通过高低电平信号控制外部设备状态,如控制小灯亮灭等;
2. GPIO特点
- GPIO特点:
- 不同型号芯片IO口数量有所差异;
- 电平快速翻转,几个时钟周期内;
- 每个IO口都可以做中断,每个IO引脚都可作为中断源,根据电平状态变化触发中断程序;
- 八种工作模式,如常用的输入和输出模式,以及复用功能和模拟功能等;
3. GPIO八种工作模式
-
每个GPIO端口都可以由软件配置成不同的工作模式,具体包括:
- 浮空输入
- 上拉输入
- 下拉输入
- 模拟输入
- 开漏输出
- 推挽输出
- 开漏复用输出
- 推挽复用输出
-
GPIO端口的基本结构
-
浮空输入
- 输入驱动器中的上拉/下拉电阻都断开,外设IO引脚电平状态通过TTL肖特基触发器(或施密特触发器)保存至输入数据寄存器IDR(Input Data Register)中,CPU通过读取寄存器数据得知引脚状态,但该模式下IO引脚状态不确定(高阻态),除非外部配有上下拉电阻,否则应尽量避免使用该模式(模拟输入模式下会断开上下拉电阻,但同时也会关闭触发器和双MOS管),因此也就有了上拉/下拉输入模式。
-
上拉输入
- 可以理解为在浮空输入模式下将上拉电阻开关闭合,则此时外设IO引脚电平状态可知,CPU则可通过读取IDR数据准确得知IO引脚电平状态,通常会应用于上升沿/下降沿信号的检测;
-
下拉输入
- 与上拉输入相似,在浮空输入模式下将下拉电阻开关闭合;
-
模拟输入
- 该模式下,上下拉电阻和触发器开关均断开,因此CPU无法通过IDR读取IO电平状态,而是通过芯片内部的模拟信号电路,用于ADC(Analog Digital Converter),DAC等这些模拟信号外设;
-
开漏输出
- 在该模式下,CPU通过写入位设置/清除寄存器BSRR(Bit Set Reset Register)与输出数据寄存器ODR(Output data Register),或直接写ODR,控制输出控制电路的电平状态,进而控制NMOS管开关状态(PMOS管在该状态下没用到,处于截止状态,输出仅有NMOS控制),改变外设引脚IO电平状态。具体来说,若ODR输出为0,再经过反相器后得到1,通过输出控制电路后,NMOS管导通,此时外设IO被VSS拉低为低电平;而若ODR输出为1,经反相器得到0,通过输出控制电路后,NMOS管截止,处于高组态,与其连接的外设IO引脚状态由外部电路上拉电阻决定。因此,实际应用该模式时会外接上拉电阻来输出高电平,否则该模式只能输出低电平。此外,整个过程中,施密特触发器是开启的,即CPU可以通过IDR读取外设IO引脚状态;
-
推挽输出
- 该模式与开漏输出模式类似,不同之处在于开漏输出模式只用到了NMOS管,完全没用到PMOS管,而推挽输出模式二者都用到了。具体来说,ODR输出为0后经过反相器输出为1,PMOS管截止,NMOS管导通,外设IO引脚输出低电平;而ODR输出为1时经过反相器后为0,此时,PMOS管导通,NMOS管截止,外设引脚输出高电平;
-
开漏复用输出
- 该模式下,与开漏输出模式类似,仍通过输出控制电路控制NMOS管的通断改变IO引脚状态,不同之处在于,输出控制电路的输入不再是输出数据寄存器ODR,而是来自于其它片上外设,再通过复用功能输出给到输出控制电路。同样地,CPU仍能够通过输入数据寄存器IDR读取外设IO引脚状态;
-
推挽复用输出
- 该模式与开漏复用模式相似,输出控制电路的输入来自于其它片上外设