ESP8266_04管脚控制与软件定时器
ESP8266_04管脚控制与软件定时器
from :https://mp.weixin.qq.com/s/APawDx4io4gKJyOeuErTLA
这一节主要有两部分内容: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管脚控制与软件定时器的更多相关文章
- FreeRTOS_软件定时器
FreeRTOS 软件定时器 实验 创建2个任务,start_task.timercontrol_task. start_stask:创建timercontrol_task任务:创建周期定时器Auto ...
- 【STM32H7教程】第22章 STM32H7的SysTick实现多组软件定时器
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第22章 STM32H7的SysTick实现 ...
- 【TencentOS tiny】深度源码分析(8)——软件定时器
软件定时器的基本概念 TencentOS tiny 的软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,本质上软件定时器的使用相当 ...
- 机械大楼电梯控制项目软件 -- github团队组建
目前在Github网站上建立了机械大楼电梯控制项目软件的软件仓库(Repository),提供了软件功能需求说明文档和Automation Studio程序模板.地址为 https://github. ...
- rt-thread中软件定时器组件超时界限的一点理解
@2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...
- 【iCore4 双核心板_uC/OS-II】例程四:软件定时器
一.实验说明: 一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的 延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁. ...
- 6.1-uC/OS-III软件定时器
1.软件定时器是 uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,但精准度肯定比硬件定时稍逊一筹. 2.软件定时器启动之后是由软件定时 ...
- 6.0-uC/OS-III软件定时器管理
1.软件定时器管理 uC/OS-III提供了软件定时器服务(相关代码在OS_TMR.C中).当设置OS_CFG.H中的OS_CFG_TMR_EN为1时软件定时器服务被使能. 2.uC/OS-III 定 ...
- uC/OS-III 软件定时器(三)
软件定时器是uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,操作简单,但精准度肯定比硬件定时稍逊一筹. 原理和实现过程 要用到的函数: ...
随机推荐
- 在win7下安装PowerShell 5.0遇到的坑
升级安装 安装.NET Framework 4.6.2下载NDP462-KB3151800-x86-x64-AllOS-ENU.exe,进行安装 安装PowerShell 4.0(5.0依赖4.0) ...
- EMR日常操作
1/ 数据root密码修改后emr配置修改: 2/ 添加s3访问 S3:hadoop-aws-2.8.5.jarjar -tfv hadoop-aws-2.8.5.jar |grep S3FileSy ...
- [转帖]英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布
英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布 intel 也出soc了 里面的东西 跟 安卓和 apple的a系列很像. https://baijiahao.baidu.com ...
- cxLookupComboBox控件的应用
1.Properties-DropDownListStyle:下拉列表的模式, 里面有三个值:lsEditList: lsEditFixedList lsFixedList 2.Head ...
- Hadoop部署(伪分布式系统)
hadoop安装 #修改主机名 hostnamectl set-hostname hadoop #修改hosts vim /etc/hosts #追加到末尾 10.0.0.11 hadoop 安装必备 ...
- Javascript - BOM 对象
浏览器相关的对象.获取浏览器相关的信息,可以设置和修改浏览器属性. 0. web-app 版 TodoList 小程序 用以下内容可以自己手写一个 TodoList 小程序,再添加几行代码就可以用手机 ...
- Kefa and Dishes(CodeForces580D)【状态压缩DP】
状态压缩DP裸题,比赛的时候没反应过来,进行了n次枚举起点的solve,导致超时. #include<cstdio> #include<iostream> #include&l ...
- 安装 pybloomfilter
1.在windows的cmd下,使用 pip install pybloomfiltermmap 命令安装,pybloomfiltermmap 时报错 ,错误信息如下 根据错误信息分析,报错原因是需要 ...
- 一键部署etcd集群
这里使用三个节点,系统版本为CentOS7 # vim deploy-etcd.sh #!/bin/bash set -x set -e #更改这里的IP, 只支持部署3个节点etcd集群 decla ...
- web框架链接
django系列教程(优):https://www.cnblogs.com/feixuelove1009/p/5823135.html