GPIO(General-purpose input/output)是通用输入/输出端口的简称,通俗的说,就是可以控制GPIO引脚输出高/低电平,并读取输入引脚的电平状态。用户可以利用GPIO实现和外设硬件进行数据交互、控制硬件工作、读取硬件工作状态等功能。本文将从使用流程、接口解析、demo代码解析及注意事项四个方面介绍GPIO使用方法。
- GPIO使用流程解析
以下流程图为使用MN316 OpenCPU SDK GPIO功能时的常见流程及相关函数接口介绍。
图1 GPIO接口函数使用流程
在MN316模组的OpenCPU中,GPIO支持配置为输入模式、输出模式和中断模式。
(1) 当设置为输入模式时,配置为上拉还是下拉需要看外部输入的电平情况,如果默认输入是低电平,那么最好配置为下拉;反之为上拉。需注意,MN316模组GPIO0、GPIO5、GPIO14仅支持下拉,其余GPIO仅支持上拉,需结合需求选择对应引脚使用。
(2) SDK中能使用的GPIO有17个,模组硬件引脚号和GPIO号对应关系如表1。对应关系可能会随SDK版本更新变化,以对应版本的《MN316_OpenCPU资源综述》为准。
MN316_OpenCPU(R14)_Standard_1.2.0版GPIO对应关系 | ||
SDK GPIO号 | MN316模组引脚号 | 原引脚名 |
GPIO_0 | 34 | GPIO0 |
GPIO_1 | 35 | GPIO1 |
GPIO_2 | 7 | UART2_TXD |
GPIO_3 | 8 | UART2_RXD |
GPIO_4 | 11 | GPIO4 |
GPIO_5 | 16 | GPIO5 |
GPIO_6 | 3 | SPI_SS |
GPIO_7 | 4 | SPI_MISO |
GPIO_8 | 5 | SPI_MOSI |
GPIO_9 | 6 | SPI_SCLK |
GPIO_10 | 36 | IIC_SCL |
GPIO_11 | 37 | IIC_SDA |
GPIO_12 | 39 | UART1_TXD |
GPIO_13 | 40 | UART1_RXD |
GPIO_14 | 21 | STATE |
GPIO_15 | 9 | UART0_TXD |
GPIO_16 | 10 | UART0_RXD |
表1 GPIO口和模组引脚对应关系
- GPIO 接口代码解析
2.1 GPIO初始化配置函数接口
图2 初始化GPIO函数
图3 初始化函数配置
(1)该函数用于初始化GPIO,其中结构体指针cm_gpio_cfg_t *cfg指向的结构体具体定义见图3;
(2)需注意GPIO 0\5\14仅支持下拉,其他GPIO仅支持上拉,初始化时需根据具体GPIO配置GPIO上下拉模式。
2.2 GPIO去初始化配置函数接口
图4 去初始化GPIO函数
注意使用完GPIO后需要去初始化,方便下次使用。
2.3 配置GPIO输出电平函数接口
图5 配置GPIO输出电平
图6 电平配置参数
该函数用于配置模组的输出电平,设置GPIO号和输出电平即可,输出电平配置如图6所示。
2.4 读取GPIO输入电平函数接口
图7 读取GPIO输入电平函数
通过此函数接口读取GPIO电平值。
2.5 设置GPIO上/下拉函数接口
图8 设置上/下拉函数
图9 上/下拉具体配置说明
该函数接口用于设置GPIO上拉、下拉状态,可配置参数如图8所示。
2.6 I/O方向模式配置函数接口
图10 IO方向模式配置函数
图11 IO模式配置说明
该函数接口用于设置GPIO方向模式,可配置参数如图9所示。
2.7 GPIO注册中断回调函数接口
图12 IO模式配置说明
使用中断功能需要先通过此函数注册。
2.8 GPIO使能中断函数接口
图13 使能中断函数
图14 中断配置参数说明
该函数用于配置GPIO中断触发方式,可配置参数如图11所示。
2.9 GPIO失能中断函数接口
图15 失能中断函数
该函数用于取消中断使能,填入GPIO号即可。
- GPIO demo代码解析
3.1 设置GPIO为上拉输入,并读取GPIO状态:
图16 配置上拉输入demo示例
3.2 设置GPIO为上拉输出,并输出高、低电平:
图17 配置输出高低电平demo示例
3.3 设置GPIO双边沿触发中断模式:
图18 配置双边沿触发中断demo示例
- 注意事项
1、AT硬件设计手册标注的GPIO顺序可能和SDK定义不同,应以《MN316_OpenCPU资源综述》文档描述为准;
2、注意GPIO开机状态,比如GPIO作为指示灯等用途时,GPIO的开机状态可能会影响指示灯的闪烁情况;
3、使用前设置引脚复用情况,复用引脚时需关注目标引脚是否已被复用为其他功能;
4、同一时刻仅一个外部GPIO可中断触发源;
5、GPIO0、GPIO5、GPIO14仅支持下拉,其余GPIO仅支持上拉。