我是靠谱客的博主 坚定盼望,这篇文章主要介绍2.04-外设篇-GPIO中断检测,现在分享给大家,希望可以做个参考。

ESP8266:SDK开发(源码见资料源码)

开发板购买链接:开发板购买链接

资料源码:https://gitee.com/yang456/Learn8266ForSDK.git

开发软件:https://mnifdv.cn/resource/cnblogs/Learn8266ForSDK/AiThinkerIDE_V0.5_Setup.exe

点击加入群聊【ESP8266开发交流群】:ESP8266开发交流群

淘宝上许多贩卖TCP,UDP,APP,上位机,MQTT,云服务器等基础控制教程的,但是基础的没必要拿出来贩卖!

因为过于简单,只能个人玩玩而已,感觉像是在坑小学生。故,我给大家整理好,开源出来以供大家学习使用!

NONOS(2.2.0)

NONOS(2.2.0)

NONOS(2.2.0)

 1.直接上菜

 

 

 

复制代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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确实是下降沿产生了中断 { os_printf("GpioDownrn"); } } } /****************************************************************************** * FunctionName : user_init * Description : entry of user application, init user function here * Parameters : none * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR user_init(void) { uart_init_2(BIT_RATE_115200,BIT_RATE_115200); os_printf("SDK version:%sn", system_get_sdk_version()); os_printf("hello_ain"); /*配置中断引脚**********************************************/ PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0); GPIO_DIS_OUTPUT(0);//如果以前设置过GPIO为输出,则调用此函数关闭GPIO输出 PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//上拉输入 //全局关闭GPIO中断 ETS_GPIO_INTR_DISABLE(); //设置中断函数 ETS_GPIO_INTR_ATTACH(gpio0_intr_handler, NULL); //设置中断触发方式 gpio_pin_intr_state_set(0, GPIO_PIN_INTR_NEGEDGE);//下降沿触发 ETS_GPIO_INTR_ENABLE(); }

复制代码

 

测试

按下按钮

 

 

 

RTOS(2.2.0)

RTOS(2.2.0)

RTOS(2.2.0)

 1.直接上菜

 

 

 

#include "gpio.h"

//设置GPIO0下降沿中断

复制代码

复制代码
1
2
3
4
5
6
7
8
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中断回调函数

复制代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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("GpioDownrn"); } } }

复制代码

 

如果使用的NONOS版本请查看文章最后的区别

 

测试

按下按钮

 

 

 

 

 

扩展:配置GPIO4

//设置GPIO4下降沿中断

复制代码

复制代码
1
2
3
4
5
6
7
8
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中断回调函数

复制代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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("GpioDownrn"); } } }

 

复制代码

 

最后

以上就是坚定盼望最近收集整理的关于2.04-外设篇-GPIO中断检测的全部内容,更多相关2内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部