2020-02-05
ESP8266的输入输出函数及流水代码编写
GPIO输出
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
// GPIO4设为IO口
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1); //GPIO4=1(高电平)
PIN_FUNC_SELECT(PIN_NAME,FUNC) 管脚功能选择
GPIO_OUTPUT_SET(gpio_no, bit_value) 设置 gpio_no 管脚输出 bit_value,与上⼀一节的输出⾼高低电平的⽰示例相同。
PIN_PULLUP_DIS(PIN_NAME) 管脚上拉屏蔽 PIN_PULLUP_EN(PIN_NAME) 管脚上拉使能
【PIN_NAME】 管脚名称 PERIPHS_IO_MUX_ “+”“管脚名“
【FUNC】 管脚功能 功能序号 - 1
【gpio_no】 IO端口序号 GPIO_ID_PIN(IO端口序号)
GPIO输入
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);
//GPIO_O设为IO口
GPIO_DIS_OUTPUT(GPIO_ID_PIN(0))// GPIO_O失能输出
PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U)
// GPIO_O失能内部上拉
While(1)
{
if(GPIO_INPUT_GET (GPIO_ID_PIN(0))==0)
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);
}
GPIO_DIS_OUTPUT(gpio_no) 设置 gpio_no 管脚输⼊入,与上⼀一节的设置输⼊入⽰示例相同。
GPIO_INPUT_GET(gpio_no) 获取 gpio_no 管脚的电平状态。
LED流水灯
#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#define LED1_OFF GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1) //LED1熄灭
#define LED2_OFF GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0) //LED2熄灭
#define LED3_OFF GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 1) //LED3熄灭
#define LED1_ON GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0) //LED1点亮
#define LED2_ON GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1) //LED2点亮
#define LED3_ON GPIO_OUTPUT_SET(GPIO_ID_PIN(14), 0) //LED3点亮
u8 LED_sta=1;
void timer_testTask(void); //函数声明,定时器回调函数
void ICACHE_FLASH_ATTR user_init(void)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12); //设置GPIO12位IO模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15); //设置GPIO15位IO模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U,FUNC_GPIO14); //设置GPIO14位IO模式
/*使用自动填装模式,每次定时器到时的时候,都会按照500ms的设置,再次定时500ms*/
hw_timer_init(1,1); //使用NMI中断源,自动填装
hw_timer_set_func(timer_testTask); //设置回调函数
hw_timer_arm(500*1000); //单位是us,定时的最大值1677.721ms,在此定时500ms
}
/*--------------------------------------------------------------*/
/*函数功能:定时器回调函数 */
/*参 数:无 */
/*返 回:无 */
/*注 意:最为硬件定时器的回调函数,不能使用 ICACHE_FLASH_ATTR宏 */
/*-------------------------------------------------------------*/