ESP8266 SDK开发: 外设篇-GPIO中断检测
Posted yangfengwu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266 SDK开发: 外设篇-GPIO中断检测相关的知识,希望对你有一定的参考价值。
直接上代码
#include "gpio.h"
//设置GPIO0下降沿中断
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);//GPIO0做为普通IO使用 GPIO_DIS_OUTPUT(0);//0:GPIO0 如果以前设置过GPIO为输出,则调用此函数关闭GPIO0输出 PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//GPIO0上拉输入 _xt_isr_mask(1<<ETS_GPIO_INUM); //关闭GPIO中断 gpio_intr_handler_register(gpio0_intr_handler, NULL);//设置中断函数 gpio_pin_intr_state_set(0, GPIO_PIN_INTR_NEGEDGE);//0:GPIO0 GPIO_PIN_INTR_NEGEDGE:下降沿触发 _xt_isr_unmask(1 << ETS_GPIO_INUM); //使能GPIO中断
//GPIO0中断回调函数
void gpio0_intr_handler() { uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//读取GPIO状态寄存器,获取中断信息 GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中断信息 if(gpio_status & (BIT(0)))//GPIO0产生的中断 { if(!GPIO_INPUT_GET(0))//GPIO0是低电平 GPIO0确实是下降沿产生了中断 { printf("GpioDown "); } } }
测试
按下按钮
扩展:配置GPIO4
//设置GPIO4下降沿中断
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U , FUNC_GPIO4);//GPIO4做为普通IO使用
GPIO_DIS_OUTPUT(4);//4:GPIO4 如果以前设置过GPI4为输出,则调用此函数关闭GPIO4输出
PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U);//GPIO4上拉输入
_xt_isr_mask(1<<ETS_GPIO_INUM); //关闭GPIO中断
gpio_intr_handler_register(gpio4_intr_handler, NULL);//设置中断函数
gpio_pin_intr_state_set(4, GPIO_PIN_INTR_NEGEDGE);//4:GPIO4 GPIO_PIN_INTR_NEGEDGE:下降沿触发
_xt_isr_unmask(1 << ETS_GPIO_INUM); //使能GPIO中断
//GPIO4中断回调函数
void gpio4_intr_handler()
{
uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//读取GPIO状态寄存器,获取中断信息
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中断信息
if(gpio_status & (BIT(4)))//GPIO4产生的中断
{
if(!GPIO_INPUT_GET(4))//GPIO4是低电平 GPIO4确实是下降沿产生了中断
{
printf("GpioDown
");
}
}
}
以上是关于ESP8266 SDK开发: 外设篇-GPIO中断检测的主要内容,如果未能解决你的问题,请参考以下文章
ESP8266 LUA脚本语言开发: 外设篇-GPIO输入检测
ESP8266 LUA脚本语言开发: 外设篇-GPIO输出高低电平
[基础篇]ESP8266-SDK教程之GPIO操作(按键LED中断定时器)