1.前言
本文是专门为基于GD32 MCU开发的工程设计人员提供,主要介绍了GPIO的功能配置、内部结构以及在不同场景使用时的注意事项,旨在帮助GD32 MCU开发者优化对通用型输入输出端口(GPIO)的使用,正确快速的使用GD32 MCU进行产品开发。
GPIO,通用型输入输出端口的简称,可以通过软件配置其输出或者输入,GD32 的 GPIO 引脚与外部设备连接,从而实现与外部通信,控制以及信号输入的功能,是 GD32 MCU 中很常见,使用最广泛的模块。
每个 GPIO 引脚可以由软件配置为输出(推挽或开漏)、输入、外设备用功能或者模拟模式。
每个 GPIO 引脚都可以配置为上拉、下拉或浮空模式或无上拉/下拉。
GD32 MCU GPIO 主要特征有:
◼ 输入/输出方向控制;
◼ 施密特触发器输入功能;
◼ 每个引脚都具有弱上拉/下拉功能;
◼ 推挽/开漏输出使能控制;
◼ 置位/复位输出使能;
◼ 可编程触发沿的外部中断—使用EXTI配置寄存器;
◼ 模拟输入/输出配置;
◼ 备用功能输入/输出配置;
◼ 端口锁定配置。
对于 GD32 某些系列 MCU 的 GPIO 可能具有更多功能,如时钟、I2C、SPI、CAN、USART、USB、ADC、DAC 等,在进行电路板设计前应查看该系列的数据手册与用户手册,对比所使用的 GPIO 是否满足需求。
2.GPIO 结构
在 GD32 MCU 中,通常有两种类型的 GPIO,非 5V 耐受 IO 以及 5V 耐受 IO(部分 MCU 没有 5VT 引脚,如 GD32A503xx 系列),两种类型的 IO 在结构上略有区别。如图 2-1. 标准 IO基本结构图所示为一个标准 IO 口的基本结构图:
图 2-1. 标准 IO 基本结构图
I/O pin 表示的芯片的 I/O pad,与外部电路相连接,其他部分电路都是芯片的内部电路。其中框图的上半部分表示 IO 的输出部分电路,当 IO 使用其备用功能连接内部其他外设时,也会共用相关功率输出部分电路。框图的下半部分表示 IO 的输入电路部分,作为备用功能连接内部其他外设时,同样也会共用输入部分电路,如施密特触发器。
框图的中间部分如红框 4 内的电路表示模拟输入输出通道,模拟通道输出时(如 DAC 输出)不经过功率输出电路,输入时也不经过施密特输入电路,直接将外部电路通过 IO pin 与内部的模拟外设直接连接。
红框 3 表示的是 IO 输出时的主要功率电路,配置相关的控制寄存器,可以控制上、下两个 MOS 管导通以实现推挽输出或者是开漏输出。
红框 2 表示 IO 口的内部上拉或者下拉电路,通过相关寄存器的配置可以实现输入口的内部上拉或者内部下拉,上拉/下拉电阻的阻值可以参考数据手册,典型值为 40kΩ,少数引脚上下拉电阻非 40 kΩ,如 GD32F425xx 的 PA10 引脚上下拉电阻为 10 kΩ,详细数据可查看数据手册中 GPIO characteristic 章节。
红框 1 中表示的 ESD 保护电路。
非 5VT IO 的 ESD 保护电路如图 2-2. 非 5VT IO 引脚基本结构图所示,ESD 保护电路在 IO对 VDD 和 VSS 分别形成两个二极管,显然,如果 IO 上的电压比 VDD 的电压大于二极管的正向导通压降,或者 IO 上电压比 VSS 电位低,且压差大于二极管的正向导通电压,则会产生从 IO到 VDD,或者从 VSS 到 IO 的电流。
5VT IO 的 ESD 保护电路如图 2-3. 5VT IO 引脚基本结构图所示,5VT IO 引脚没有连接到电源(VDD)的内部保护二极管。
因此,在实际使用中若存在引脚先上电,MCU 后上电的情况,优先选择使用 5VT 的引脚作为与外部连接先上电引脚,避免由于引脚漏电造成 IO 引脚拉低;若必须选择标准 IO 引脚,需采用比如三极管等隔离措施,防止引脚漏电。
图 2-2. 非 5VT IO 引脚基本结构图
图 2-3. 5VT IO 引脚基本结构图
注意:5VT IO 与非 5VT IO 内部结构有部分区别。
3.典型应用场景与注意事项
不同类型的 IO 在使用时有一些注意事项,接下来分别从输入与输出两个角度来描绘下不同类型 IO 的典型应用场景与特性以及注意事项。
http://3.1.IO 输入
首先是 IO 口的输入电压范围,输入耐压值表示 IO 口所能容忍的输入电压范围,部分 GD32MCU 含有 5VT IO 与非 5VT IO,5VT IO 与非 5VT IO 有着不同的特性,如用户手册中的表 3-1.绝对最大额定值所示。
针对 IO 口的输入场景,我们有几点需要注意:
1. 对于 5VT IO,当 VDD=0 时(即 MCU 未上电时),其引脚输入电压不能超过 3.6V;
2. 我们需要根据 IO 口外部输入信号的电压值范围来慎重选择 5VT IO 还是非 5VT IO,如果输入信号已经大于 5.5V 了,就要将信号调理成适宜的范围再送到 MCU 的 IO 口;
3. GPIO 输入低电平判定范围为≤0.3 VDD ,GPIO 输入高电平判定范围为≥0.7VDD ;
4. 根据前面描述不同类型 IO 口的典型结构,如果非 5VT IO 上的电压比 VDD 电压大 0.3V 以上,则会可能使 ESD 保护电路中 IO 对 VDD 的二极管导通造成漏电,尤其是在 MCU 未上电,而 IO 口就已经有电平时的情景,此时,如果选择 5VT IO 可以有效规避从 IO 向 VDD漏电的情况;典型的,如果 IO 接入的是 I2C 总线,我们就需要选择 5VT 引脚;
5. MCU 所有的 IO 在上电完成还未进行其他配置时,均默认工作在浮空输入模式,其中调试口为上拉或下拉模式,具体的上拉还是下拉请参照用户手册。因此,在一些需要产生固定电平的场景中,如果 MCU 从待机模式复位,则需要考虑这些 IO 口的默认输入上下拉状态,且在程序重新配置这些 IO 的状态之前,默认状态不会变化;
6. 为了获得更低的功耗水平,尤其是在睡眠模式和深度睡眠模式中,需要将未使用的 IO 配置成模拟输入,或者配置为浮空输入状态的同时外部加上下拉,或者设置为内部上拉或下拉。需注意设置内部上拉时,外部不可再硬件下拉,避免额外功耗,同理,内部下拉时,外部不可硬件上拉(这里未使用的 IO 也包括在本封装上未引出来的 IO)。对于 GD32 低功耗 MCU 产品,在运行模式下,如前描述的设置也会获得最好的功耗表现;
7. 5VT IO 只有在输入模式下才可输入最大 5.5V 电压。当输出模式被启用时,5VT IO 不再可以承受 5.5V 电压。有关 I/O 输入电压的详细信息,请参阅数据表通用操作条件表中的 VIN参数;
8. 只有在引脚上没有启用模拟功能时,5VT IO 才可输入最大 5.5V 电压。如果在 5VT IO 上启用了一些模拟输入功能(ADC 输入有源,COMP 输入,OPAMP 输入),那么引脚上的最大工作电压不能超过 min(VDDA, VREFP) + 0.3 V。
http://3.2.IO 输出
在 IO 输出的场景我们也有一些要点需要注意,
1. 开漏输出电压与输出带载电流有非常显著的关系,通常 IO 在输出高时,如果所带负载越大,则输出的高电平就会被往下拉的越低,同理,如果 IO 在输出低时,流进 IO 的电流越大,则 IO 输出的低电平就会被往上拉的越高;
2. 对于 MCU 中存在备份域的型号,其中有部分 IO 是工作在备份域电源中的,这些 IO 的带载能力有限,建议这些 IO 的 IO speed 参数设置为最低速度(一般为 2MHz)。如 GD32F4xx系列中的 PC13、PC14、PC15、PI8 四个引脚,不同系列驱动能力较弱的引脚不同,详细信息可在该系列数据手册中查询;
3. GPIO 可通过电流与 IO 配置速度有关,目前所有 GD32 MCU IO 最大可通过电流均为 25mA(工作在备份域的引脚除外),GPIO 拉电流以及灌电流均不可超过 25 mA。当 GPIO速度配置较低时,其拉电流与灌电流能力可能达不到 25 mA;
4. 部分 GD32 MCU 包含 I/O 补偿单元,如 E50x 系列。默认情况下,I/O 补偿单元是不使用的,当 I/O 端口输出速度大于 50MHz 时,建议使用 I/O 补偿单元对 I/O 端口进行斜率控制,从而降低 I/O 端口噪声对工作电源的影响;
5. IO 在高低电平转换时过冲会随着 IO 口速度增大而增大,可通过降低 IO 口速度来减少过冲;
6. GPIO 输出的高低电平并非绝对的零或者 VDD,而会随着 IO 配置的速度、VDD 电压、输出电流的大小而变化。如表 3-2. GD32F425xx GPIO DC 特性所示为 GD32F425xx GPIO 输出高低电平随这些变量变化的数据表。
3.3.其他注意事项
为了更好的提升 GD32 MCU 在一些典型应用场景下的性能,在使用 GD32 MCU 的 GPIO 时还需注意以下事项:
1. 部分系列 GD32 MCU ADC 输入引脚为标准 IO 引脚,需注意避免 ADC 输入电压超过VDD+0.3V 的情况,否则可能由于漏电造成 ADC 采样异常;在使用 ADC 模块时,所有ADC 引脚均不可引入负电压,否则将导致 ADC 采样不准;
2. VBAT 引脚允许从外部电压源(电池或电容)为 GD32 备份域供电。当 GD32 微控制器仅通过VBAT 引脚供电时,只有在备份域里的 GPIO 才能工作。备份域的 GPIO 驱动能力较弱,且不同系列的备份域 GPIO 不同,可在该系列的用户手册中查看。对于没有外部电池的应用,建议将 VBAT 引脚通过 100nF 的外部陶瓷去耦电容接地后连接到 VDD 引脚上;
3. 为提高 EMC 性能以及避免浮空输入 IO 漏电风险,未使用的 IO 口引脚建议硬件上拉或者是下拉。IO 的输入电路可以简化为图 3-1. IO 输入电路简化图,Pxx 表示 MCU 的某一个引脚。当IO 配置为浮空输入模式时,SW1 和 SW2 导通。如果 Pxx 没有外部电压驱动,则 Pxx 的电压为 VSS~VDD 之间的任意电压值。假设图 3-1. IO 输入电路简化图中 MN 的阈值电压是VTHN,MP 的阈值电压是 VTHP,当 Pxx 的电压处在 VTHN~(VDD-VTHP)时,MN 和 MP 同时开启,VDD 到 VSS 之间可能会有非常大的漏电。
当 IO 配置为上拉模式、下拉模式或模拟模式时,MP 和 MN 不会同时导通,VDD 到 VSS之间不会有漏电。
图 3-1. IO 输入电路简化图
4. 多组中同一标号 PIN 仅可配置一个 IO 口为外部中断,例:PA0、PB0、PC0 仅支持三个中的其中一个 IO 口产生外部中断,不支持三个同为外部中断模式;
教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462