
1.GPIO基础介绍1.1 GPIO框图1 保护二极管以及上下拉电阻两个保护二极管当IO引脚输入电压高于VDD时上方导通低于VSS下方导通。相关知识VDDDdevice 表示器件的意思, 即器件内部的工作电压,VSSSseries 表示公共连接的意思通常指电路公共接地端电压。二极管通过PN结实现单向导电正向电压时导通反向电压时截止。自行记忆技巧PN结P部电压大于N部电压导通从P向NP是三角形底部N是三角形顶部2 P-MOS和N-MOS使 GPIO 具有了“推挽输出”和“开漏输出”两种模式。推挽输出在该结构中输入高电平时经过反向后上方的 P-MOS 导通下方的 N-MOS 关闭对外输出高电平而在该结构中输入低电平时经过反向后 N-MOS 管导通 P-MOS 关闭对外输出低电平。开漏输出上方的 P-MOS 管完全不工作。开漏输出无法真正输出高电平即高电平时没有驱动能力需要借助外部上拉电阻完成对外驱动。3 输出数据寄存器双 MOS 管结构电路的输入信号是由 GPIO“输出数据寄存器 GPIOx_ODR”提供的因此我们通过修改输出数据寄存器的值就可以修改 GPIO 引脚的输出电平。4 复用功能输出指 STM32 的其它片上外设对 GPIO 引脚进行控制此时 GPIO 引脚用作该外设功能的一部分算是第二用途。从其它外设引出来的“复用功能输出信号”与 GPIO本身的数据据寄存器都连接到双 MOS 管结构的输入中通过图中的梯形结构作为开关切换选择。5 输入数据寄存器GPIO 引脚经过内部的上、下拉电阻可以配置成上/下拉输入然后再连接到施密特触发器信号经过触发器后模拟信号转化为 0、 1 的数字信号然后存储在“输入数据寄存器 GPIOx_IDR”中通过读取该寄存器就可以了解 GPIO 引脚的电平状态。6 复用功能输入GPIO 引脚的信号传输到 STM32 其它片上外设由该外设读取引脚状态。7 模拟输入输出当 GPIO 引脚用于 ADC 采集电压的输入通道时用作“模拟输入”功能此时信号是不经过施密特触发器的因为经过施密特触发器后信号只有 0、 1 两种状态所以 ADC 外设要采集到原始的模拟信号信号源输入必须在施密特触发器之前。类似地当 GPIO 引脚用于 DAC 作为模拟电压输出通道时此时作为“模拟输出”功能 DAC 的模拟信号输出就不经过双 MOS 管结构模拟信号直接输出到引脚。1.2 GPIO工作模式1.2.1 输入模式 (模拟/浮空/上拉/下拉)其中输入模式可设置为上拉、下拉、浮空和模拟输入四种。上拉和下拉输入很好理解默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的完全由外部的输入决定一般接按键的时候用的是这个模式。模拟输入则用于 ADC 采集。1.2.2 输出模式 (推挽/开漏)在输出模式中推挽模式时双 MOS 管以轮流方式工作输出数据寄存器 GPIOx_ODR 可控制 I/O输出高低电平。开漏模式时只有 N-MOS 管工作输出数据寄存器可控制 I/O 输出高阻态或低电平。输出速度可配置有 2MHz10MHz50MHz 的选项。此处的输出速度即 I/O 支持的高低电平状态最高切换频率支持的频率越高功耗越大如果功耗要求不严格把速度设置成最大即可。1.2.3 复用功能 (推挽/开漏)复用功能模式中输出使能输出速度可配置可工作在开漏及推挽模式但是输出信号源于其它外设输出数据寄存器 GPIOx_ODR 无效输入可用通过输入数据寄存器可获取 I/O 实际状态但一般直接用外设的寄存器来获取该数据信号。通过对 GPIO 寄存器写入不同的参数就可以改变 GPIO 的工作模式。