|
esp8266的GPIO引脚不仅仅用于控制外部电路,它们还与设备的功能息息相关,如设备的休眠和启动。因此,**电路复杂的情况下,我们需要对GPIO进行复用或者重新配置GOIO的功能。
首先是引脚的配置
espressif官方提供的nonos sdk里,GPIO 相关接⼝位于 /ESP8266_NONOS_SDK/include/eagle_soc.h & gpio.h,我们在这个文件里,能找到对应引脚支持的复用功能,这里以12 13 14引脚为例
从规格书中我们可以看到这组引脚不仅可以用作GPIO口,还可以用于SPI通信
接下来,我们转到eagle_soc.h看看相关的定义
在这里,我们可以看到一个IO口的**。**实际上是对寄存器的配置,同时也定义了IO口支持的功能。如果我们要将引脚12、13和14配置为普通的IO引脚,我们可以使用PIN_FUNC_SELECT函数来选择引脚功能,如下:
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14);
复制代码
在这里,我们只是完成了引脚的配置。如果我们需要将引脚用于I2C通信或其他协议,可能需要配置引脚的上拉或下拉模式。通常我们购买的贴片ESP8266的部分引脚已经完成了内部上拉。从官方的原理图中也可以看出,对于没有内部上拉或下拉的IO口,我们需要使用以下宏定义来启用或禁用引脚的上拉:
- PIN_PULLUP_DIS(io)或者PIN_PULLUP_EN(io);
复制代码
在完成IO引脚的配置后,我们需要启用IO的输出功能。Espressif的SDK提供了两种方式来启用GPIO的输出。第一种是使用宏定义进行输出,第二种是调用函数进行输出。调用函数的好处是能够同时配置多个引脚如:
宏定义输出:
- GPIO_OUTPUT_SET(gpio,bit_value);
复制代码
使用函数同时多个引脚输出:
- gpio_output_set(BIT12|BIT13,0,IT12|BIT13,0);
复制代码
对于此函数,第一个参数是设置输出为⾼的位,对应位为1,输出⾼,对应位为0,不改变状态
第二个是设置输出为低的位,对应位为1,输出低,对应位为0,不改变状态,第三个是设置使能输出的位,第四个是设置使能输⼊的位。因此我们使用gpio作为输出,只需要使用前三个参数即可。
|
|