技术编程|STM32的GPIO详细介绍( 二 )


本文插图

下拉输入模式下 , I/O 端口的电平信号直接进入输入数据寄存器 。 但是在 I/O 端口悬空(在无信号输入)的情况下 , 输入端的电平可以保持在低电平;并且在 I/O 端口输入为高电平的时候 , 输入端的电平也还是高电平 。
模拟输入模式

技术编程|STM32的GPIO详细介绍
本文插图

模拟输入模式下 , I/O 端口的模拟信号(电压信号 , 而非电平信号)直接模拟输入到片上外设模块 , 比如 ADC 模块等等 。
开漏输出模式

技术编程|STM32的GPIO详细介绍
本文插图

开漏输出模式下 , 通过设置位设置 / 清除寄存器或者输出数据寄存器的值 , 途经 N-MOS 管 , 最终输出到 I/O 端口 。 这里要注意 N-MOS 管 , 当设置输出的值为高电平的时候 , N-MOS 管处于关闭状态 , 此时 I/O 端口的电平就不会由输出的高低电平决定 , 而是由 I/O 端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候 , N-MOS 管处于开启状态 , 此时 I/O 端口的电平就是低电平 。 同时 , I/O 端口的电平也可以通过输入电路进行读取;注意 , I/O 端口的电平不一定是输出的电平 。
开漏复用输出模式

技术编程|STM32的GPIO详细介绍
本文插图

开漏复用输出模式 , 与开漏输出模式很是类似 。 只是输出的高低电平的来源 , 不是让 CPU 直接写输出数据寄存器 , 取而代之利用片上外设模块的复用功能输出来决定的 。
总结与分析
1、什么是推挽结构和推挽电路?
推挽结构一般是指两个参数相同的三极管或 MOS 管分别受两互补信号的控制 , 总是在一个三极管或 MOS 管导通的时候另一个截止 。 高低电平由输出电平决定 。
推挽电路是两个参数相同的三极管或 MOSFET , 以推挽方式存在于电路中 , 各负责正负半周的波形放大任务 。 电路工作时 , 两只对称的功率开关管每次只有一个导通 , 所以导通损耗小、效率高 。 输出既可以向负载灌电流 , 也可以从负载抽取电流 。 推拉式输出级既提高电路的负载能力 , 又提高开关速度 。
2、开漏输出和推挽输出的区别?
开漏输出:只可以输出强低电平 , 高电平得靠外部电阻拉高 。 输出端相当于三极管的集电极 。 适合于做电流型的驱动 , 其吸收电流的能力相对强(一般 20ma 以内);
推挽输出:可以输出强高、低电平 , 连接数字器件 。
关于推挽输出和开漏输出 , 最后用一幅最简单的图形来概括:

技术编程|STM32的GPIO详细介绍
本文插图

该图中左边的便是推挽输出模式 , 其中比较器输出高电平时下面的 PNP 三极管截止 , 而上面 NPN 三极管导通 , 输出电平 VS+;当比较器输出低电平时则恰恰相反 , PNP 三极管导通 , 输出和地相连 , 为低电平 。 右边的则可以理解为开漏输出形式 , 需要接上拉 。
3、在 STM32 中选用怎样选择 I/O 模式?
【技术编程|STM32的GPIO详细介绍】浮空输入 _IN_FLOATING ——浮空输入 , 可以做 KEY 识别 , RX1
带上拉输入 _IPU——IO 内部上拉电阻输入
带下拉输入 _IPD—— IO 内部下拉电阻输入
模拟输入 _AIN ——应用 ADC 模拟输入 , 或者低功耗下省电
开漏输出 _OUT_OD ——IO 输出 0 接 GND , IO 输出 1 , 悬空 , 需要外接上拉电阻 , 才能实现输出高电平 。 当输出为 1 时 , IO 口的状态由上拉电阻拉高电平 , 但由于是开漏输出模式 , 这样 IO 口也就可以由外部电路改变为低电平或不变 。 可以读 IO 输入电平变化 , 实现 C51 的 IO 双向功能


推荐阅读