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 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,操作简单,但精准度肯定比硬件定时稍逊一筹. 原理和实现过程 要用到的函数: ...
随机推荐
- SQLite进阶-9.别名
我们可以暂时给表或者列重命名为另一个名字,称为别名,重命名只是临时运行时改变,不会改变数据库中的实际的名字. -- 语法 SELECT column_name AS column_alias_name ...
- P1616 疯狂的采药 (完全背包优化)
(点击此处查看原题) 题意 简单来说,就是一个完全背包,不过这里卡住了常规的完全背包写法,时间复杂度为O( V*∑( V/c[i] ))如下所示: ;i <= n ;i ++) { scanf( ...
- 斜率优化DP(转载)
转载自:https://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i] ...
- python 2 和 python 3的区别
python2和python3区别 python2:源码不统一,源码(功能)重复,维护困难,除法的时候返回来的是小数点,()浮点数 python3:源码统一,源码不重复,除法的时候返回来的是整 ...
- T100——自动执行设置了但没执行
azzi950设置了背景定时执行,但到底没执行, 重启的命令如下.三个命令都执行一下.指令 1: r.r azzp950 kill 指令 2: r.r azzp951 kill 指令 3: r.r a ...
- Dreamoon and Strings CodeForces - 477C (字符串dp)
大意: 给定字符串$s$, $p$, 对于$0\le x\le |s|$, 求$s$删除$x$个字符后, $p$在$s$中的最大出现次数. 显然答案是先递增后递减的, 那么问题就转化求最大出现次数为$ ...
- Latex使用记事(1)
意义用途 用于出版物的排版,样式控制,使得编排标准美观. 整体框架 一个最简环境 \documentclass{article} \begin{document} content... \end{do ...
- Postgresql在Windows下的解压安装
1.将下载的压缩包解压,我是解压在D:\postgreSQL\pgsql中. 2.设置环境变量如下: set PGHOME=D:\postgreSQL\pgsql set PGDATA=%PGH ...
- 怎样理解 Vue 中的计算属性 computed 和 methods ?
需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...
- [C#.net]xlApp.Workbooks.Open打开无法远程访问
上月还能使用的xlApp.Workbooks.Open,这个月报无法远程访问,搞了半天,才找到原因是Foxit PDF 的Execl插件搞的鬼,记录下 Excel.Workbooks wbChecks ...