NodeMCU NO_OS SDK 开发——GPIO功能
开发环境
系统:win10 64位
开发板:NodeMCU
ide : vscode
GPIO功能
PIN 相关宏定义
以下宏定义控制 GPIO 管脚状态:
PIN_PULLUP_DIS(PIN_NAME) | 管脚上拉屏蔽 |
---|---|
PIN_PULLUP_EN(PIN_NAME) | 管脚上拉使能 |
PIN_FUNC_SELECT(PIN_NAME, FUNC) | 管脚功能选择 |
GPIO 输出
配置管脚为GPIO模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
设置高电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);
设置低电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);
GPIO 输入
设置输入模式
GPIO_DIS_OUTPUT(GPIO_ID_PIN(2));
获取管脚电平状态
uint_8 level = 0;
level = GPIO_INPUT_GET(GPIO_ID_PIN(2));
配置GPIO中断
1.配置管脚为GPIO模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
2. 配置GPIO为输入模式
GPIO_DIS_OUTPUT(GPIO_ID_PIN(2));
3. 禁⽌止所有的 IO 中断
ETS_GPIO_INTR_DISABLE();
4. 设置中断处理理函数
ETS_GPIO_INTR_ATTACH(GPIO_INTERRUPT,NULL);
5.配置 GPIO为下降沿中断触发的⽅方式
gpio_pin_intr_state_set(GPIO_ID_PIN(2),GPIO_PIN_INTR_NEGEDGE);
6. 使能 GPIO 中断
ETS_GPIO_INTR_ENABLE();
中断函数处理
1. 清除该中断
Uint16 gpio_status=0;
gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);
2. 判断是哪个 IO 触发的中断(当有多个 IO 都配置为中断⽅方式时)
If(gpio_status==GPIO_Pin_2)
3. 如果是双沿中断,应该判断此次中断为上升沿中断还是下降沿中断
if(!GPIO_INPUT_GET(GPIO_ID_PIN(2)))
4. 中断函数处理理流程示例例