GPIO控制

# 简介 GPIO(General-purpose input/output),通用型之输入输出的简称,可实现某时刻电平状态的输出与输入,即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 # 特性 - 共支持28个GPIO,部分引脚上电前后状态不同,使用时参考下表。 ``` 1. VLCD、VMMC、VSIM1相关引脚电压域会根据外部硬件,其内部自动调整其输出电压,为1.8V/3V/3.3V 2. At reset, after reset 都默认指的就是function 0功能的状态(即GPIO 配置还没生效前的状态) 3. GPIO0~5 电源域默认关闭,所以at reset, after reset状态都是L 4. GPIO29~31电源域默认关闭,所以at reset, after reset状态都是L ``` | | |Pin State| | | | | | |Function 0| |Function 1| |Function 2| | |---|---|---------|---|---|---|---|-----|-----|----------|----|----------|----|----------|------| |GPIO number|Name|At Reset(H/L/Hiz)| |After Reset(H/L/Hiz)| |Power Domain|Pull-up|Pull-Down| Function 0|Type|Function 1|Type|Function 2|Type| |GPIO_0|LCD_DATA/GPIO_0|INPUT|L|INPUT|L|VLCD(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_0|I/O|LCD_DATA|O| |GPIO_1|LCD_DC/NET_STATUS/GPIO_1|INPUT|L|INPUT|L|VLCD(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_1|I/O|LCD_DC|O|NET_STATUS|O| |GPIO_2|LCD_CLK/AP_WAKEUP_MODULE/GPIO_2|INPUT|L|INPUT|L|VLCD(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_2|I/O|LCD_CLK|O|AP_WAKEUP_MODULE|I| |GPIO_3|LCD_CS/WAKEUP_OUT/GPIO_3|INPUT|L|INPUT|L|VLCD(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_3|I/O|LCD_CS|O|WAKEUP_OUT|O| |GPIO_4|LCD_SEL/NET_MODE/GPIO_4|INPUT|L|INPUT|L|VLCD(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_4|I/O|LCD_SEL|O|NET_MODE|O| |GPIO_5|MODULE_STATUS/GPIO_5|INPUT|L|INPUT|L400ms后,由底层软件控制为OUTPUT变H|VDDIO(1.8V)|20K/4.7K|40K|GPIO_5|I/O|MODULE_STATUS|O| |GPIO_9|SPI1_CLK/GPIO_9|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_9|I/O|SPI1_CLK|I/O|| |GPIO_10|SPI1_CS/GPIO_10|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_10|I/O|SPI1_CS|I/O|| |GPIO_11|SPI1_DOUT/GPIO_11|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_11|I/O|SPI1_DOUT|I/O|| |GPIO_12|SPI1_DIN/GPIO_12|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_12|I/O|SPI1_DIN|I/O|| |GPIO_13|GPIO_13|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_13|I/O|||| |GPIO_14|I2C2_SCL/GPIO_14|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/1.8K|40K|GPIO_14|I/O|I2C2_SCL|O|| |GPIO_15|I2C2_SDA/GPIO_15|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/1.8K|40K|GPIO_15|I/O|I2C2_SDA|I/O|| |GPIO_17|CAMI2C_SDA1/GPIO_17|INPUT|H|INPUT|H|VDDIO(1.8V)|20K/1.8K|40K|GPIO_17|I/O|CAMI2C_SDA1|I/O|| |GPIO_18|UART1_CTS/GPIO_18|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_18|I/O|UART1_CTS|I|| |GPIO_19|UART1_RTS/GPIO_19|INPUT|L|INPUT|L|VDDIO(1.8V)|20K/4.7K|40K|GPIO_19|I/O|UART1_RTS|O|| |GPIO_20|UART2_RXD/GPIO_20|INPUT|L|OUTPUT|L 5ms后变为H|VDDIO(1.8V)|20K/4.7K|40K|GPIO_20|I/O|UART2_RXD|I|| |GPIO_21|UART2_TXD/GPIO_21|INPUT|L|OUTPUT|输出log, 不建议使用|VDDIO(1.8V)|20K/4.7K|40K|GPIO_21|I/O|UART2_TXD|O|| |GPIO_22|ZSP_UART_TXD/GPIO_22|INPUT|L|OUTPUT|L 5ms后变为H|VDDIO(1.8V)|20K/4.7K|40K|GPIO_22|I/O|ZSP_UART_TXD|O|| |GPIO_23|USIM_CD/GPIO_23|INPUT|L|OUTPUT|输出log, 不建议使用|VDDIO(1.8V)|20K/4.7K|40K|GPIO_23|I/O|USIM_CD|I|| |GPIO_24|MMC1_CMD/GPIO_24|INPUT|H|INPUT|H,700ms后变为L|VMMC(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_24|I/O|MMC1_CMD|I/O|| |GPIO_25|MMC1_DAT0/GPIO_25|INPUT|H|INPUT|H,700ms后变为L|VMMC(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_25|I/O|MMC1_DAT0|I/O|| |GPIO_26|MMC1_DAT1/GPIO_26|INPUT|H|INPUT|H,700ms后变为L|VMMC(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_26|I/O|MMC1_DAT1|I/O|| |GPIO_27|MMC1_DAT2/GPIO_27|INPUT|H|INPUT|H,700ms后变为L|VMMC(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_27|I/O|MMC1_DAT2|I/O|| |GPIO_28|MMC1_DAT3/GPIO_28|INPUT|H|INPUT|H,700ms后变为L|VMMC(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_28|I/O|MMC1_DAT3|I/O|| |GPIO_29|SIM1_CLK/GPIO_29|OUTPUT|L|OUTPUT|L|VSIM1(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_29|I/O|SIM1_CLK|O|| |GPIO_30|SIM1_DATA/GPIO_30|INPUT|L|INPUT|L|VSIM1(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_30|I/O|SIM1_DATA|I/O|| |GPIO_31|SIM1_RST/GPIO_31|OUTPUT|L|OUTPUT|L|VSIM1(1.8V/3V/3.3V)|20K/4.7K/1.8K|50K|GPIO_31|I/O|SIM1_RST|O| # 常见问题及故障排查 - CAT1 的gpio配置成io输出放在循环定时里配置,为啥会有脉冲出来? 建议如果要配置成输出要在外面用函数方式配置调用, - gpio_30,配置为输入模式时,默认电平改不了,一直是高? 模块内部有强上拉,改不了。 - 如果不插sim0,gpio31会一直置高,配置输出低也无效,插入sim0,配置输出正常。![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210923115348928_gpio29_30_31.png "undefined") - GPIO7和usb休眠唤醒功能冲突说明 1:lua 3037版本新增一条特殊指令,但不提供对外说明: 对内使用说明: 默认底层占用了GPIO7用于USB睡眠和唤醒模块,所以GPIO7不再给客户使用 如果客户已经用了GPIO7 如果不需要USB控制模块睡眠和唤醒功能,可以通过AT+GPIO7ENABLE=0 关闭底层对GPIO7的占用 如果需要使用USB控制模块睡眠和唤醒功能,可以通过AT+GPIO7ENABLE=1,gpionum 指令,将底层对GPIO7的占用改成其他没有使用的管脚 - 3V引脚和3.3V引脚之间通讯要串联多大电阻? 1K的电阻 - 防拆监测工作原理? 防拆就是有两个管脚在模块内部是连在一起的, 这两个管脚可以连接到单片机的两个GPIO上, 如果模块被拆掉了,这两个GPIO之间的连接会断开 - io能检测脉冲个数吗? 8910 1.3固件3102 以上版本支持定时检测脉冲,增加一种配置,返回高低脉冲的个数 详细使用说明请参考 [gpio脉冲检测模式](https://doc.openluat.com/share_article/h6t5VpZq4PjUr) - 为什么脉冲检测功能没作用? 先关闭按键防抖功能:pio.pin.setdebounce(0xffffffff) - 722 AT固件301845 gpio开机电平测试 [722UG开机电平测试.docx](https://cdn.openluat-luatcommunity.openluat.com/attachment/20211008182835785_722UG开机电平测试.docx) - gpio的最大负载电流和灌电流是多少?能直接驱动led灯吗? 输出负载2ma,灌电流低于5ma,建议接三级管驱动led灯。 - gpio用作输入监测,1.8为高,0.8为低,可以吗?电气规定多少伏才为低? 不行 , 要低于0.6V - GPIO7能不能用? GPIO7 默认被底层 休眠复用时候,不受控的问题,源于默认内部将GPIO7 和系统休眠做了硬件关联。(如果模块不休眠,则能正常控制,但是LUAT 不插USB ,默认就会休眠) 有解决方案: AT+GPIO7ENABLE=1,18 此固定指定就是将 绑定到GPIO7 上的系统功能,转移到其他GPIO, 比如:GPIO18。 这样GPIO7 就能当普通GPIO口用了。