打印
[STM32F1]

STM32F1系列GPIO引脚的八种工作模式

[复制链接]
744|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1为高电平,0为低电平





GPIO八种工作模式

下面我们通过GPIO的 基本结构图来分别进行详细分析,先看看总的框图,如图所示。


如上图所示,可以看到右边只有 I/ O引脚,这个引脚,其他部分都是 GPIO 的 内部结构:


① 保护二极管


保护二极管共有两个,用于保护引脚外部过高或过低的电压输入。当引脚输入电压高于 VDD 时,上面的二极管导通,当引脚输入电压低于 VSS 时,下面的二极管导通,从而使输入 芯片内部的电压处于比较稳定的值。虽然有二极管的保护,但这样的保护却很有限,大电压大 电流的接入很容易烧坏芯片。所以在实际的设计中我们要考虑设计引脚的保护电路。


②上拉、下拉电阻


它们阻值大概在 30 ~ 50K 欧之间,可以通过上、下两个对应的开关控制,这两个开关由寄 存器控制。当引脚外部的器件没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电 平由引脚内部上、下拉决定,开启内部上拉电阻工作,引脚电平为高,开启内部下拉电阻工作, 则引脚电平为低。同样,如果内部上、下拉电阻都不开启,这种情况就是我们所说的浮空模式。 浮空模式下,引脚的电平是不可确定的。引脚的电平可以由外部的上、下拉电平决定。需要注意的是,STM32的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还 是得外部上拉。


③密特触发器


对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向 阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位. 翻转为低电准位,或是由低电准位翻转为高电准位对应的阈值电压是不同的。只有当输入电压 发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。这种双阈值动作被称为迟 滞现象,表明施密特触发器有**性。从本质_上来说,施密特触发器是一种双稳态多谐振荡器。 施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波 形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,以及在闭回路正回授/负回授 配置中用于实现多谐振荡器。 下面看看比较器跟施密特触发器的作用的比较,就清楚的知道施密特触发器对外部输入信 号具有一定抗干扰能力,如图所示。



④ P-MOS管和N-MOS管


这个结构控制GPIO的开漏输出和推挽输出两种模式。开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。


推挽输出:这两只对称的MOS管每次只有一 只导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载拉电流(既可以输出高电平也可以输出低电平)。推拉式 输出既能提高电路的负载能力,又能提高开关速度。


上面我们对GPIO的基本结构图中的关键器件做了介绍,下面分别介绍GPIO八种工作模 式对应结构图的工作情况。



使用特权

评论回复
沙发
实际测量不符|  楼主 | 2024-3-30 15:42 | 只看该作者
输入浮空
输入浮空模式:上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO口的电平完全是由外部电路决定(输入1读出为1,输入0读出为0)。如果IO引脚没有连接其他的设备,那么检测其输入电平是不确定的。该模式可以用于按键检测等情景。

使用特权

评论回复
板凳
实际测量不符|  楼主 | 2024-3-30 15:42 | 只看该作者
输入上拉
上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的时候,可以使用内部上拉电阻(空闲时读出为1,输入1读出1,输入0读出0),这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大, 所以只是“弱上拉”,不适合做电流型驱动。

使用特权

评论回复
地板
实际测量不符|  楼主 | 2024-3-30 15:43 | 只看该作者
输入下拉
下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻 的时候,可以使用内部下拉电阻(空闲时为读出为0,输入1读出1,输入0读出0),这样可以节省一个外部电阻,但是内部下拉电阻的阻值较大, 所以不适合做电流型驱动。

使用特权

评论回复
5
实际测量不符|  楼主 | 2024-3-30 15:43 | 只看该作者
模拟输入
上下拉电阻断开,施密特触发器关闭,双MOS管也关闭。其他外设可以通过模拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元单元,用于ADC、DAC、 MCO这类操作模拟信号的外设。

使用特权

评论回复
6
实际测量不符|  楼主 | 2024-3-30 15:44 | 只看该作者
开漏输出
STM32的开漏输出模式是数字电路输出的一种,从结果上看它只能输出低电平Vss或者高阻态,常用于IIC通讯(IIC_SDA)或其它需要进行电平转换的场景。根据 《STM32F10xxx参考手册_V10(中文版).pdf》第108页关于“GPIO输出配置”的描述,我 们可以知道开漏模式下,IO是这样工作的:

⚫ P-MOS被“输出控制”控制在截止状态,因此IO的状态取决于N-MOS的导通状况;

⚫ 只有N-MOS还受控制于输出寄存器,“输出控制”对输入信号进行了逻辑非的操作;

⚫ 施密特触发器是工作的,即可以输入,且上下拉电阻都断开了,可以看成浮空输入;

根据参考手册的描述,同时为了方便大家理解,我们在“输出控制”部分做了等效处理, 如图所示。图中写入输出数据寄存器①的值怎么对应到IO引脚的输出状态② 是我们最关心的。

根据参考手册的描述:开漏输出模式下P-MOS一直在截止状态,即不导通,所以P-MOS 管的栅极相当于一直接VDD。如果输出数据寄存器①的值为0,那么IO引脚的输出状态②为 低电平,这是我们需要的控制逻辑,怎么做到的呢?是这样的,输出数据寄存器的逻辑0经 过“输出控制”的取反操作后,输出逻辑1到N-MOS管的栅极,这时N-MOS管就会导 通,使得IO引脚连接到VSS,即输出低电平。如果输出数据寄存器的值为1,经过“输出 控制”的取反操作后,输出逻辑0到N-MOS管的栅极,这时N-MOS管就会截止。又因 为P-MOS管是一直截止的,使得IO引脚呈现高阻态,即不输出低电平,也不输出高电平。 因此要IO 引脚输出高电平就必须接上拉电阻。 又由于F1系列的开漏输出模式下,内部 的上下拉电阻不可用,所以只能通过接芯片外部上拉电阻的方式,实现开漏输出模式下输 出高电平。如果芯片外部不接上拉电阻,那么开漏输出模式下,IO无法输出高电平。

使用特权

评论回复
7
实际测量不符|  楼主 | 2024-3-30 15:44 | 只看该作者
在开漏输出模式下,施密特触发器是工作的,所以IO口引脚的电平状态会被采集到输入数据寄存器中,如果对输入数据寄存器进行读访问可以得到IO口的状态。也就是说开漏输出 模式下,我们可以读取IO引脚状态。

使用特权

评论回复
8
实际测量不符|  楼主 | 2024-3-30 15:45 | 只看该作者
推挽输出
STM32的推挽输出模式,从结果上看它会输出低电平VSS或者高电平 VDD。推挽输出跟开漏输出不同的是,推挽输出模式P-MOS管和N-MOS管都用上。同样 地,我们根据参考手册推挽模式的输出描述,可以得到等效原理图,如图所示。 根据手册描述可以把“输出控制”简单地等效为一个非门。

如果输出数据寄存器①的值为0,经过“输出控制”取反操作后,输出逻辑1到P MOS 管的栅极,这时P-MOS管就会截止,同时也会输出逻辑1到N-MOS管的栅极,这时N-MOS 管就会导通,使得IO引脚接到 VSS,即输出低电平。

如果输出数据寄存器的值为1 ,经过“输出控制”取反操作后,输出逻辑0到N MOS 管的栅极,这时N-MOS管就会截止,同时也会输出逻辑0到P-MOS管的栅极,这 时P-MOS管就会导通,使得IO引脚接到VDD,即输出高电平。

由上述可知,推挽输出模式下,P-MOS管和N-MOS管同一时间只能有一个管是导通 的。当IO引脚在做高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉 电流,使其负载能力和开关速度都有较大的提高。

另外在推挽输出模式下,施密特触发器也是打开的,我们可以读取 IO 口的电平状态。

由于推挽输出模式下输出高电平时,是直接连接VDD,所以驱动能力较强,可以做电 流型驱动,驱动电流最大可达25mA,但是芯片的总电流有限,所以并不建议这样用,最 好还是使用芯片外部的电源。

使用特权

评论回复
9
实际测量不符|  楼主 | 2024-3-30 15:45 | 只看该作者
开漏式复用功能
一个IO口可以是通用的IO口功能,还可以是其它外设的特殊功能引 脚,这就是IO口的复用功能,如图所示。一个IO口可以是多个外设的功能引脚,我们需要选择其中一个外设的功能引脚。当选择复用功能时,引脚的状态是由对应的外设控制, 而不是输出数据寄存器。除了复用功能外,其它的结构分析请参考开漏输出模式。

另外在开漏式复用功能模式下,施密特触发器也是打开的,我们可以通过输入数据寄存器 读取IO口的电平状态,同时外设也可以读取IO口的信息。

使用特权

评论回复
10
实际测量不符|  楼主 | 2024-3-30 15:47 | 只看该作者
推挽式复用功能
复用功能介绍请查看开漏式复用功能,结构分析请参考推挽输出模式。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

589

帖子

1

粉丝