从今天开始,我将开始更新有关于STM32的相关内容。如有不足请在评论区联系我,感谢大家的指正。
ps.此笔记使用STM32F407VET6开发板
什么是GPIO?
GPIO,即General Porpose Intput Output。是通用输入输出端口的简称。可以通过软件控制其输出和输入。stm32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。GPIO是STM32最基本的外设之一。
GPIO的工作模式
高电平与低电平:
在进行GPIO的功能讲解之前,我们需要先了解高/低电平这一概念:
在单片机中,高低电平是用来表示数字信号的两个不同状态。通常情况下,高电平对应于逻辑“1”,而低电平对应于逻辑“0”。具体的电压值取决于单片机的电源电压和它的电气标准。例如,在TTL(晶体管-晶体管逻辑)电平系统中,一般认为高电平是在2.4V以上(最高可达5V),而低电平是在0.4V以下。
GPIO的输入功能:
GPIO的输入功能分为上拉输入、下拉输入、浮空输入以及模拟输入四种,下面将会一一说明。
上拉输入:
IO内部闭合上拉电阻的开关,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为高电平,如果I/O口输入低电平,那么引脚就为低电平,MCU读取到的就是低电平。即只有在外部电路输入低电平的时候 CPU读取到的才是低电平。
下拉输入:
IO内部闭合下拉电阻开关,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为低电平, 如果I/O口输入高电平,那么引脚就为高电平,MCU读取到的就是高电平。即只有在外部电路输入高电平的时候 CPU读取到的才是高电平。
浮空输入:
浮空输入模式下,既不接上拉电阻,也不接下拉电阻,I/O端口的电平信号直接进入输入数据寄存器。MCU直接读取I/O口电平。如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。这种情况下 IO引脚的电平状态完全由外部输入所决定,此时CPU可以通过读取数据的,操作来获取外部电路的工作状态。
模拟输入:
当GPIO引脚用于ADC采集电压的输入通道时,用作“模拟输入”功能,此时信号不经过施密特触发器,直接直接进入ADC模块,并且输入数据寄存器为空 ,CPU不能在输入数据寄存器上读到引脚状态。
注:当GPIO用于模拟功能时,引脚的上、下拉电阻是不起作用的,这个时候即使配置了上拉或下拉模式,也不会影响到模拟信号的输入输出。
只有ADC和DAC会用到模拟输入。
GPIO的输出功能:
推挽输出:
在推挽输出模式时,N-MOS管和P-MOS管都工作,如果我们控制输出为低电平,则P-MOS管关闭,N-MOS管导通,I/O端口输出低电平,若控制输出为高电平,则P-MOS管导通N-MOS管关闭,I/O端口输出高电平。CPU往外写高电平”1”时,此时引脚输出一个高电平。CPU往外写低电平”0”时,此时引脚输出一个低电平
开漏输出:
在该模式下,引脚只能输出低电平,要输出高电平需要通过外部上拉电阻或其他方式。通常用于与外部器件连接。
推免复用:
GPIO不仅仅可以用作普通的 IO 口输出,还可以作为芯片上其他外设的特殊功能引脚,有些引脚可能可以用作多种不同功能,这种就叫做GPIO的复用,具体用作哪种功能,需要根据使用进行相应的配置。
开漏复用:
GPIO不仅仅可以用作普通的 IO 口输出,还可以作为芯片上其他外设的特殊功能引脚,有些引脚可能可以用作多种不同功能,这种就叫做GPIO的复用,具体用作哪种功能,需要根据使用进行相应的配置。
小结
输入模式:
(1)浮空输入 IO引脚的电平状态完全由外部输入所决定。
(2)上拉输入 只有在外部电路输入低电平的时候 CPU读取到的才是低电平。
(3)下拉输入 只有在外部电路输入高电平的时候 CPU读取到的才是高电平。
(4)模拟输入 ADC和DAC用这个模式。
输出模式:
(1)开漏输出 只能输出低电平。
(2)开漏复用 复用功能是指GPIO口用作其他的外设的功能口线。
(3)推挽输出 输出1就输出高电平,输出0就输出低电平。
(4)推挽复用 复用功能是指GPIO口用作其他的外设的功能口线。

Comments 2 条评论
gpio应该搭配三极管电路分析哦,比如推挽或者开漏,每种方式的电流都不一样,od弱于pp,所以一般od都会接上拉电阻
@Minloha 是这样的,推挽输出内部通常由两个互补的三极管或MOS管组成。当输出高电平时,上管导通、下管截止,电流从电源经过上管流向负载。当输出低电平时,下管导通、上管截止,电流从负载经下管流入地。
开漏输出内部只有一个下管(N-MOS或NPN),上管不存在或始终关闭。输出高电平时,下管截止,输出端处于高阻态(相当于断路),必须通过外部上拉电阻才能拉到高电平。
其实我本来是想在后面结合一些外设一块写的,但是一直懒得更就咕咕了XD
感谢大佬的评论`(`・ω・´)`