ESP8266_04管脚控制与软件定时器

from :https://mp.weixin.qq.com/s/APawDx4io4gKJyOeuErTLA

原创: MCU启航 单片机爱好者 今天

这一节主要有两部分内容:1、管脚的控制;2、软件定时器的使用。

先说定时器,ESP8266内部的定时器分为软件定时器和硬件定时器。手册中指出硬件定时器其实就跟单片机里的timer一样,而软件定时器纯粹由软件实现,咱们可以理解为单片机里面类似for循环之类的循环延时函数。

定时器理解了,管脚控制就简单了,先上一下我这里的模块原理图:

原理很简单,板上有一个三色的LED,所以这里实现一个定时实现LED开关的程序。先说GPIO的用法,分俩步。使用之前包含“user_interface.h”文件:

1、设置管脚为普通的GPIO模式

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);

函数PIN_FUNC_SELECT的功能是选择管脚功能,第一个参数是管脚的名字,第二个参数看起来像管脚编号,但其实是管脚对应的功能。

在编译器中选中FUNC_GPIO12,按F3,会打开eagle_soc.h文件,在这个文件里你会发现,无论是FUNC_GPIO12,FUNC_GPIO13,还是多少,对应的宏定义都是3:

#define FUNC_GPIO12                     3

2、设置管脚方向和电平

gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0):

该函数的功能是设置GPIO属性,共有四个参数,没有用到的填0即可。

第一个参数,设置输出为高的位;

第二个参数,设置输出为低的位;

第三个参数,设置使能输出的管脚;

第四个参数,设置使能输入的管脚。

所以上面一行代码的意思是:设置GPIO12和GPIO13为输出,12输出高,13输出低。同理,下面一行代码的意思是:设置GPIO12为输入。

gpio_output_set(0, 0, 0, BIT12):

注:参考手册2c-esp8266_sdk_api_guide_cn_v1.5.4的152页。

然后是软件定时器的使用,使用之前包含如下两个头文件:

#include "ets_sys.h"       //内有timer结构体的定义

#include "osapi.h"

使用方法也很简单,共分四步:

1、定义一个软件定时器的结构体

os_timer_t LED_timer;             //定义一个软件定时器的结构体,用于实现周期操作

2、关掉该定时器的定时功能

os_timer_disarm(&LED_timer);      //配置之前,先关闭

3、设置该定时器的回调函数。使用定时器,必须设置回调函数

os_timer_setfn(&LED_timer, (os_timer_func_t *)LED_TURN, NULL);

该函数共有三个参数:

第一个,你要设置哪个定时器?LED_timer

第二个,定时器定时时间到了之后,要执行哪个函数:LED_TURN

第三个,回调函数的参数,没有的话写NULL即可。

完了,也很简单。等等!定时的时长是多少?别急。

4、使能定时器,并设置时长,是否循环执行

os_timer_arm(&LED_timer, 3000, 1);

该函数共有三个参数:

第一个,你要使能哪个定时器?         LED_timer

第二个,时长多长?                                 3000,单位是毫秒。另有微秒的函数,可自行研究。

第三个,这三秒定时的功能只运行一次,还是循环执行?1,循环;0,一次。

第三步里,提到了一个函数LED_TURN,这个函数就是开启或关闭LED的函数:

void LED_TURN()

{

static state_flag = 0;

if(state_flag == 0)

{

//GPIO12拉高,GPIO13拉低

gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0);

state_flag = 1;

}

else

{

gpio_output_set(BIT13, BIT12, BIT12|BIT13, 0);

state_flag = 0;

}

}

到此,软件定时器的用法说完了。

注:参考手册2c-esp8266_sdk_api_guide_cn_v1.5.4的23页。

 注意事项:手册建议,不要在程序中使用while(1)  实现死循环,非常危险。

依次clean和build一下,生成bin文件,下载后可看到板上的LED,依次亮灭。

程序下载链接:https://pan.baidu.com/s/1fDc4ap2TeazjP_nQL7ZtVg
         提取码:9onb

ESP8266_04管脚控制与软件定时器的更多相关文章

  1. FreeRTOS_软件定时器

    FreeRTOS 软件定时器 实验 创建2个任务,start_task.timercontrol_task. start_stask:创建timercontrol_task任务:创建周期定时器Auto ...

  2. 【STM32H7教程】第22章 STM32H7的SysTick实现多组软件定时器

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第22章       STM32H7的SysTick实现 ...

  3. 【TencentOS tiny】深度源码分析(8)——软件定时器

    软件定时器的基本概念 TencentOS tiny 的软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,本质上软件定时器的使用相当 ...

  4. 机械大楼电梯控制项目软件 -- github团队组建

    目前在Github网站上建立了机械大楼电梯控制项目软件的软件仓库(Repository),提供了软件功能需求说明文档和Automation Studio程序模板.地址为 https://github. ...

  5. rt-thread中软件定时器组件超时界限的一点理解

    @2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...

  6. 【iCore4 双核心板_uC/OS-II】例程四:软件定时器

    一.实验说明: 一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的 延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁. ...

  7. 6.1-uC/OS-III软件定时器

    1.软件定时器是 uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,但精准度肯定比硬件定时稍逊一筹. 2.软件定时器启动之后是由软件定时 ...

  8. 6.0-uC/OS-III软件定时器管理

    1.软件定时器管理 uC/OS-III提供了软件定时器服务(相关代码在OS_TMR.C中).当设置OS_CFG.H中的OS_CFG_TMR_EN为1时软件定时器服务被使能. 2.uC/OS-III 定 ...

  9. uC/OS-III 软件定时器(三)

    软件定时器是uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,操作简单,但精准度肯定比硬件定时稍逊一筹. 原理和实现过程 要用到的函数: ...

随机推荐

  1. #学习笔记:CentOS7学习之十三(2):磁盘介绍与管理

    1.磁盘分区工具与挂载 1.1 硬盘分区符认识: MBR概述:全称为Master Boot Record,即硬盘的主引导记录. 硬盘的0柱面.0磁头.1扇区称为主引导扇区(也叫主引导记录MBR).它由 ...

  2. sshpass和做软链接

    参考: https://help.aliyun.com/document_detail/54530.html?spm=5176.11065259.1996646101.searchclickresul ...

  3. 【3.3】mysql中的Federated存储引擎,远程表,相当于sql server的linked server

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  4. 小记--------spark的worker原理分析及源码分析

     

  5. ABP创建应用服务

    原文作者:圣杰 原文地址:ABP入门系列(4)——创建应用服务 在原文作者上进行改正,适配ABP新版本.内容相同 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DT ...

  6. charindex函数的用法

    例一: CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开.我们用CHARINDX函数确定两个名字中间空格的位置.通过这个方法,我们可以分析ContactN ...

  7. js变量声明提升

    1.变量提升 根据javascript的运行机制和javascript没有块级作用域这个特点,可以得出,变量会声明提升移至作用域 scope (全局域或者当前函数作用域) 顶部的. 变量声明提升至全局 ...

  8. 【原创】大叔案例分享(5)id打通

    经常有一些需要做id打通的场景,比如用户id打通等, 问题抽象是每条数据都可以解析出一个或多个kv pair:(id_type,id),然后需要将某一个kv pair匹配的多条数据进行merge: 比 ...

  9. H.264 详解

    一.MPEG-4说明 1.VOP视频编码技术 VO(Video Object):视频对象,它是场景中的某个物体,最简单的情况下就是矩形框,它是有生命期的,由时间上连续的许多帧构成. VOP(Video ...

  10. mybatis 插入语句 返回自增长id方法

    背景:目前有个插入语句需要获取插入记录的id  因为id是自增长的,所以要在插入后返回这个id 错误1: mapper.xml: <!-- 新增 返回自增长id--> <insert ...