GPIO(General Purpose Input/Output)是一种通用输入输出接口,用于连接微控制器、嵌入式系统或其他电子设备与外部世界进行交互。
GPIO是一种非常灵活的接口,可以实现数字输入、数字输出、模拟输入、模拟输出等多种功能。在嵌入式系统中,GPIO通常在芯片引脚和外部电路之间起到了一个桥梁的作用。
通过GPIO,我们可以将内部的信号或数据与外部的设备或传感器进行连接和交互。例如,可以通过GPIO读取按键的状态、控制LED的亮灭,或者连接各种传感器读取温度、湿度、光强等物理量。因为GPIO非常通用,所以几乎所有的微控制器都具有GPIO功能。在开发嵌入式系统时,我们通常会使用GPIO来实现各种基本的输入输出功能,因此对GPIO的掌握是非常必要的。
STM32F407中的GPIO
STM32F407是一款基于Arm内核的高级32位MCU,具有140个GPIO端口,每个端口的PAD模块电路基本一致,能够实现浮空输入、上拉输入、下拉输入、模拟输入四种输入模式以及推挽输出和开漏输出两种输出模式。
STM32F407概貌图(POLY)
一般GPIO由两部分组成,一部分是寄存器,存储着输入或者需要输出的数据,通过访问寄存器可以对IO端口进行操作;简单来说,寄存器就是一个内存单元,一个具有特殊功能的内存单元。另一部分是PAD模块,为IO端口的驱动电路,其结构如下图。
STM32F407中GPIO的仿真分析
GPIO工作原理
GPIO的工作原理涉及多个寄存器的操作。对于输入功能,可以通过读取某个寄存器来确定引脚的电位高低;对于输出功能,可以通过写入某个寄存器来控制引脚输出高电位或低电位。
此外,GPIO还支持中断功能,可以在外部事件触发时产生中断请求,实现实时响应或处理特定事件。当我们说到操作一个外设或者是完成某一个功能时,其实都是在操作寄存器。如下图,此为GPIO端口输出速度寄存器,可以通过写入寄存器的某位来控制引脚输出的速度。
GPIO寄存器
GPIO工作模式
输入模式
浮空输入:引脚处于悬空状态。浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,与内部电路无关,因此读取该端口的电平是不确定的,易受干扰。一般多用于外部按键输入或需要灵活配置输入阻抗的场合。
上拉输入:在引脚上接上拉电阻。输入的电平不会因上下浮动而导致输入信号不稳定。当外部没有信号输入时,上拉电阻会将输入信号钳在高电平,此时引脚始终读到高电平信号。如下图所示,图中PAD信号是IO端口信号,此时IO端口没有输入,是上拉电阻将信号钳在高电平;PAD_Z是PAD模块中输出电路的输出信号。该模式适用于需要默认高电平的输入场合。
上拉输入(外部没有输入)
当外部输入高电平时,上拉电阻对其没有影响;当外部输入低电平时,由于上拉电阻的驱动能力较弱,无法改变输入的逻辑状态,输入依旧是逻辑‘0’,此时引脚始终读到输入的电平信号,如下图所示。
上拉输入(外部有输入)
下拉输入:在引脚上接下拉电阻。输入的电平不会因上下浮动而导致输入信号不稳定,当外部没有信号输入时,下拉电阻会将输入信号钳在低电平,此时引脚始终读到低电平信号。如下图所示,图中PAD信号是IO端口信号,此时IO端口没有输入,是下拉电阻将信号钳在低电平;PAD_Z是PAD模块中输出电路的输出信号。该模式适用于需要默认低电平的输入场合。