最近项目需要检测IO口下降沿信号和定时计数,于是就用到了GPIO中断和硬件定时器。有点可惜,github上面RTOS版sdk没有硬件定时器的使用方法,能够参考的只有1.5的sdk,然而我不会移植,只能班门弄斧。参考网上给的demo,实际在项目中用了发现网上给的用法很坑,有一些点需要注意,总结分享给大家,以下用法基于sdk 1.5。

1、gpio硬件中断使用

/* gpio interrupt handler */
LOCAL void gpio_interrupt_cb(void){/*// 不可靠的代码_xt_isr_mask(1<<ETS_GPIO_INUM);    //disable interruptprintf("gpio_interrupt_cb \n");GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS,TRUE); //clear interrupt mask_xt_isr_unmask(1<<ETS_GPIO_INUM); //Enable the GPIO interrupt*/uint32 gpio_status;gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS );GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS,gpio_status);printf("gpio_interrupt_cb \n");
}void gpio_input_set(void){GPIO_ConfigTypeDef gpio_in_cfg;gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE; // 下降沿  GPIO_PIN_INTR_LOLEVELgpio_in_cfg.GPIO_Mode = GPIO_Mode_Input;gpio_in_cfg.GPIO_Pullup = GPIO_PullUp_EN; // GPIO_PullUp_ENgpio_in_cfg.GPIO_Pin = GPIO_Pin_4;gpio_config(&gpio_in_cfg);GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, TRUE); //清除中断标志gpio_intr_handler_register(gpio_interrupt_cb, NULL);_xt_isr_unmask(1 << ETS_GPIO_INUM); // 使能GPIO中断
}

2、硬件定时器

硬件定时器中断使用的一些注意事项:
1、之前的开发文档,硬件定时器最下支持100us的计时,实际更改为50us也是可以正常运行的,但在实际应用中根据需要尽量改大一点,不然cpu总是去响应中断效率很低,且中断回调函数里面的函数尽可能短小简洁。
2、hw_test_timer_cb中可删除其他代码替换为自己的代码
3、当设置定时的时间很短是,切忌在hw_test_timer_cb中处理延时或执行时间长的代码,printf都不可以(当我设置为50us时,回调中只执行printf,cpu都会跑飞掉,大家可以自己验证一下)。
4、如何去开启关闭硬件定时器,参考 [ESP8266 关闭硬件定时器]。

#include "hw_timer.h"#define REG_WRITE(_r,_v)    (*(volatile uint32 *)(_r)) = (_v)
#define REG_READ(_r)        (*(volatile uint32 *)(_r))
#define WDEV_NOW()          REG_READ(0x3ff20c00)uint32 tick_now2 = 0;
void hw_test_timer_cb(void)
{static uint16 j = 0;j++;if ((WDEV_NOW() - tick_now2) >= 10000) {// 1000000 ~ 1s , 10000 ~ 10ms static uint32 idx = 1;tick_now2 = WDEV_NOW();printf("b%u:%d\n", idx++, j);j = 0;}//hw_timer_arm(50);
}void user_init(void)
{hw_timer_init(1);hw_timer_set_func(hw_test_timer_cb);hw_timer_arm(1000);
}

gpio中断和硬件定时器更详细的请参考:
1,ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点
2,嵌入式应用编程经验之谈-ESP8266引脚中断编程
3,ESP8266 GPIO中断学习
4, ESP8266-Demos/H01-gpio_app/user/user_gpio.c

5,利用 " 软件定时器 "或“硬件定时器” 定时0.5秒闪烁点亮一盏LED

esp8266~GPIO中断和硬件定时器的正确使用相关推荐

  1. 二,ESP8266 GPIO和SPI和定时器和串口

    让这个灯亮 这个灯连接到了GPIO2,低电平点亮 gpio.mode(4,gpio.OUTPUT)--输出模式 gpio.write(4,0)--输出低电平 这两句话就亮了 可能会有疑问,明明是GPI ...

  2. 关于ESP8266 GPIO中断使用的总结

    最近折腾新项目需要用到GPIO的中断来处理一些逻辑功能,翻看了官网的API开发文档,文档说的比较简单,只是对API方法做了一下解释说明,没有实际的完整例子,没办法,只能问度娘了.度娘果然啥都有,参考了 ...

  3. ESP8266-SDK的硬件定时器

    ESP8266的硬件定时器的使用也比较简单 1.设置定时器的时钟源和自动重装载 hw_timer_init(FRC1_SOURCE, 1);//设置时钟源 和定时器自动重装载 时钟源有两个 NMI 中 ...

  4. ARM(I.MX6ULL) EPIT定时器中断实验、定时器按键消抖

    参考:Linux之ARM (I.MX6ULL) EPIT定时器详解 作者:一只青木呀 发布时间: 2020-09-20 10:03:37 网址:https://blog.csdn.net/weixin ...

  5. ESP32 + ESP-IDF |GPIO 02 - 使用高分辨率定时器,每100ms时间间隔驱动外部两个LED灯闪烁

    文章目录 一.前言 二.VSCODE + ESP-IDF 2.1.快速创建项目 2.2.选择串口通道,ESP芯片型号 三.代码 3.1.头文件 3.2.全局变量 3.3.app_main( )函数 3 ...

  6. 乐鑫Esp32学习之旅⑦ esp32上利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  7. linux驱动开发5 按键中断实验(定时器和中断)

    led:IO的输出 :key:IO的输入 法一:直接读写IO 使用while(1)无限读取,但CPU占用达到了99.6%,所以不行 #include <linux/types.h>#inc ...

  8. ESP-12S学习(3)--软件定时器和硬件定时器500ms点亮LED

    一.软件定时器的使用 ESP8266的软件定时器不是特别的精准,想要精准的定时器,那么最好是使用硬件定时器,这一点在SDK手册上面有说到 软定时有5个函数和一个结构体 结构体:os_timer_t t ...

  9. 【正点原子Linux连载】第十七章GPIO中断试验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. shell [] [[ ]] {}区别
  2. html标签一对一绑定的组件,一种原生组件替换HTML标签的轻量级方法尝试
  3. UITabBar,UINavigationBar的布局和隐藏问题
  4. linux java执行_linux下运行java
  5. Delphi无法修改Clientdataset的字段的解决方法
  6. 安卓手机上微信无法打开Https网址的完美解决方案
  7. 利用node.js以及express框架初始化服务端
  8. OllyDBG V1.10聆风听雨汉化版
  9. 在python中实现输出易经六十四卦
  10. Python小爬虫之协程爬虫快速上手
  11. 计算机毕业设计 SSM同学录管理系统 同学聚会报名系统 在线聚会报名系统Java Vue MySQL数据库 远程调试 代码讲解
  12. linux 使用dmidecode查看设备序列号
  13. python环境-基于go-cqhttp-简易qq聊天机器人
  14. 电磁场与仿真软件(32)
  15. 聚光灯下的jqTouch与jQuery Mobile
  16. 为什么采购订单管理非常重要?
  17. uniApp打包以及发布
  18. 用python编写彩色螺旋线
  19. SQLHelper.cs
  20. Python小爬虫,爬取当前全部股票信息

热门文章

  1. 一本通提高篇 哈希和哈希表(一)哈希
  2. 2020美亚杯团体赛刷题 部分题解(1-27、73-124)
  3. 微信支付之-扫码支付-模式2(模式1)
  4. 完成8亿D轮融资,MINIEYE预计第三季度实现L2++项目交付
  5. android reset无命令,wiping_手机出现wiping data无命令然后就关不了机了
  6. iOS textfield textview 三方键盘的联想 或者 iPad键盘undo导致崩溃
  7. 技巧分享:解决Word 2010当中“分页符”造成的空白行
  8. java人脸识别教程_用 Java 实现人脸识别功能(附源码)
  9. k8s三 | 使用YAML文件创建k8s资源对象
  10. 键盘键位对应ASCII码