技术编程|STM32的GPIO详细介绍
STM32 的 GPIO 介绍STM32 引脚说明
GPIO 是通用输入 / 输出端口的简称 , 是 STM32 可控制的引脚 。 GPIO 的引脚与外部硬件设备连接 , 可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能 。
STM32F103ZET6 芯片为 144 脚芯片 , 包括 7 个通用目的的输入 / 输出口(GPIO)组 , 分别为 GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG , 同时每组 GPIO 口组有 16 个 GPIO 口 。 通常简略称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx , 其中 x 为 0-15 。
STM32 的大部分引脚除了当 GPIO 使用之外 , 还可以复用位外设功能引脚(比如串口) , 这部分在【STM32】STM32 端口复用和重映射(AFIO 辅助功能时钟) 中有详细的介绍 。
GPIO 基本结构
每个 GPIO 内部都有这样的一个电路结构 , 这个结构在本文下面会具体介绍 。
本文插图
【技术编程|STM32的GPIO详细介绍】这边的电路图稍微提一下:
保护二极管:IO 引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入 。 当引脚电压高于 VDD 时 , 上方的二极管导通;当引脚电压低于 VSS 时 , 下方的二极管导通 , 防止不正常电压引入芯片导致芯片烧毁 。 但是尽管如此 , 还是不能直接外接大功率器件 , 须加大功率及隔离电路驱动 , 防止烧坏芯片或者外接器件无法正常工作 。
P-MOS 管和 N-MOS 管:由 P-MOS 管和 N-MOS 管组成的单元电路使得 GPIO 具有“推挽输出”和“开漏输出”的模式 。 这里的电路会在下面很详细地分析到 。
TTL 肖特基触发器:信号经过触发器后 , 模拟信号转化为 0 和 1 的数字信号 。 但是 , 当 GPIO 引脚作为 ADC 采集电压的输入通道时 , 用其“模拟输入”功能 , 此时信号不再经过触发器进行 TTL 电平转换 。 ADC 外设要采集到的原始的模拟信号 。
这里需要注意的是 , 在查看《STM32 中文参考手册 V10》中的 GPIO 的表格时 , 会看到有“FT”一列 , 这代表着这个 GPIO 口时兼容 3.3V 和 5V 的;如果没有标注“FT” , 就代表着不兼容 5V 。
STM32 的 GPIO 工作方式
GPIO 支持 4 种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和 4 种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出) 。 同时 , GPIO 还支持三种最大翻转速度(2MHz、10MHz、50MHz) 。
每个 I/O 口可以自由编程 , 但 I/O 口寄存器必须按 32 位字被访问 。
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
下面将具体介绍 GPIO 的这八种工作方式:
浮空输入模式
本文插图
浮空输入模式下 , I/O 端口的电平信号直接进入输入数据寄存器 。 也就是说 , I/O 的电平状态是不确定的 , 完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下 , 读取该端口的电平是不确定的 。
上拉输入模式
本文插图
上拉输入模式下 , I/O 端口的电平信号直接进入输入数据寄存器 。 但是在 I/O 端口悬空(在无信号输入)的情况下 , 输入端的电平可以保持在高电平;并且在 I/O 端口输入为低电平的时候 , 输入端的电平也还是低电平 。
下拉输入模式
本文插图
下拉输入模式下 , I/O 端口的电平信号直接进入输入数据寄存器 。 但是在 I/O 端口悬空(在无信号输入)的情况下 , 输入端的电平可以保持在低电平;并且在 I/O 端口输入为高电平的时候 , 输入端的电平也还是高电平 。
模拟输入模式
本文插图
模拟输入模式下 , I/O 端口的模拟信号(电压信号 , 而非电平信号)直接模拟输入到片上外设模块 , 比如 ADC 模块等等 。
开漏输出模式
本文插图
开漏输出模式下 , 通过设置位设置 / 清除寄存器或者输出数据寄存器的值 , 途经 N-MOS 管 , 最终输出到 I/O 端口 。 这里要注意 N-MOS 管 , 当设置输出的值为高电平的时候 , N-MOS 管处于关闭状态 , 此时 I/O 端口的电平就不会由输出的高低电平决定 , 而是由 I/O 端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候 , N-MOS 管处于开启状态 , 此时 I/O 端口的电平就是低电平 。 同时 , I/O 端口的电平也可以通过输入电路进行读取;注意 , I/O 端口的电平不一定是输出的电平 。
开漏复用输出模式
本文插图
开漏复用输出模式 , 与开漏输出模式很是类似 。 只是输出的高低电平的来源 , 不是让 CPU 直接写输出数据寄存器 , 取而代之利用片上外设模块的复用功能输出来决定的 。
总结与分析
1、什么是推挽结构和推挽电路?
推挽结构一般是指两个参数相同的三极管或 MOS 管分别受两互补信号的控制 , 总是在一个三极管或 MOS 管导通的时候另一个截止 。 高低电平由输出电平决定 。
推挽电路是两个参数相同的三极管或 MOSFET , 以推挽方式存在于电路中 , 各负责正负半周的波形放大任务 。 电路工作时 , 两只对称的功率开关管每次只有一个导通 , 所以导通损耗小、效率高 。 输出既可以向负载灌电流 , 也可以从负载抽取电流 。 推拉式输出级既提高电路的负载能力 , 又提高开关速度 。
2、开漏输出和推挽输出的区别?
开漏输出:只可以输出强低电平 , 高电平得靠外部电阻拉高 。 输出端相当于三极管的集电极 。 适合于做电流型的驱动 , 其吸收电流的能力相对强(一般 20ma 以内);
推挽输出:可以输出强高、低电平 , 连接数字器件 。
关于推挽输出和开漏输出 , 最后用一幅最简单的图形来概括:
本文插图
该图中左边的便是推挽输出模式 , 其中比较器输出高电平时下面的 PNP 三极管截止 , 而上面 NPN 三极管导通 , 输出电平 VS+;当比较器输出低电平时则恰恰相反 , PNP 三极管导通 , 输出和地相连 , 为低电平 。 右边的则可以理解为开漏输出形式 , 需要接上拉 。
3、在 STM32 中选用怎样选择 I/O 模式?
浮空输入 _IN_FLOATING ——浮空输入 , 可以做 KEY 识别 , RX1
带上拉输入 _IPU——IO 内部上拉电阻输入
带下拉输入 _IPD—— IO 内部下拉电阻输入
模拟输入 _AIN ——应用 ADC 模拟输入 , 或者低功耗下省电
开漏输出 _OUT_OD ——IO 输出 0 接 GND , IO 输出 1 , 悬空 , 需要外接上拉电阻 , 才能实现输出高电平 。 当输出为 1 时 , IO 口的状态由上拉电阻拉高电平 , 但由于是开漏输出模式 , 这样 IO 口也就可以由外部电路改变为低电平或不变 。 可以读 IO 输入电平变化 , 实现 C51 的 IO 双向功能
推挽输出 _OUT_PP ——IO 输出 0- 接 GND ,IO 输出 1 - 接 VCC , 读输入值是未知的
复用功能的推挽输出 _AF_PP ——片内外设功能(I2C 的 SCL、SDA)
复用功能的开漏输出 _AF_OD——片内外设功能(TX1、MOSI、MISO.SCK.SS)
推荐阅读
- 科学探索|新技术能快速将海水变成饮用水
- 美将38家华为子公司列入实体清单|美将38家华为子公司列入实体清单,限制它们获得某些“敏感技术”
- 现代迎来技术“爆发”解读第十代索纳塔动力系统
- 栽培技术|发展林下树下黑木耳栽培技术,促进林业生产发展,增加经济收入
- 隐身能力太差,俄军仍采购76架苏57战机,新技术加持或超越F35
- 法制|未成年小伙网上学偷车技术 第一次作案就被抓了
- 美国发射的帕克太阳探测器,为什么不怕热?技术实在太牛
- 小米科技|官方评判小米,始终没有掌握核心技术,依旧是组装公司
- 郓城县召开纺织行业技术交流大会
- 鼎盛网军事|单发命中率达到90%,我国引进法国技术生产一导弹,高原实战逞威
