esp8266灯上电闪一下_物联网领域Esp8266学习之旅③ 利用 " 软件定时器 " 定时0.5秒闪烁点亮一盏LED。(附带demo)...

本文介绍了如何利用Esp8266的软件定时器实现0.5秒间隔的LED灯闪烁。通过关闭、初始化定时器结构体,设置回调函数以及启动定时器,实现了GPIO12的周期性高低电平切换,达到LED灯闪烁效果。
摘要由CSDN通过智能技术生成

欢迎来到物联网智能家居顶量级别wifi模块Esp8266学习之旅。

一、认识定时器。

在我们的SDK编程手册可以清楚看到8266有软件定时器和硬件定时器。

这里写图片描述

个人见解。如果你可以使用更为精确的定时时间,那你就用硬件定时器来。至于在性能上,我觉得硬件定时器是比较耗性能的,在PWM里面,hw_timer.c 的接⼝口不不能跟 PWM 驱动接⼝口函数同时使⽤用,因为二者共⽤用了了同⼀一个硬 件定时器。

而且硬件中断定时器器的回调函数定义,请勿添加 ICACHE_FLASH_ATTR。

二、使用软件定时器步骤:

①、先宏定义一个定时器结构体:

// 定时器结构体

static os_timer_t os_timer;

②、对于同一个定时器不能同时使用,所以我在初始化前先关闭该定时器。

// 关闭该定时器

os_timer_disarm( &os_timer );

③、初始化定时器的回调函数,即每次定时任务函数。下图是函数os_timer_setfn()有关说明。我这里的定时器回调函数是Led_Task_Run ()。

// 配置该定时器回调函数

os_timer_setfn( &os_timer, (ETSTimerFunc *) ( Led_Task_Run ), NULL );

这里写图片描述

④、开始执行我们的定时器,也就是使能操作。下图是这个函数的说明:第二个参数是定时时间,单位us,注意: 1s =1000us ,第三个参数是boolean值,false是不重复,true是重复执行。

// 启动该定时器

os_timer_arm( &os_timer, 500, true );

这里写图片描述

三、看看我们的效果图(0.5秒LED灯闪一次):

这里写图片描述

电路图:

电路图

我们的逻辑是:通过定时器每0.5秒执行一次开灯或关灯指令。使GPIO12为高电平输出或低电平输出。

代码:

/** 定时器结构体 */

static os_timer_t os_timer;

/** LED操作命令 */

void Led_Cmd(bool status ){

if (status == true ) {

GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);

} else {

GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);

}

}

void Led_Task_Run(void){

static bool status = false;

if ( status == true ) {

status = false;

} else {

status = true;

}

Led_Cmd( status );

}

void user_init(void)//初始化

{

// 设置串口0和串口1的波特率

uart_init(57600, 57600);

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);

Led_Cmd(false);

/** 关闭该定时器 */

os_timer_disarm( &os_timer );

/** 配置该定时器回调函数 */

os_timer_setfn( &os_timer, (ETSTimerFunc *) ( Led_Task_Run ), NULL );

/** 启动该定时器 */

os_timer_arm( &os_timer, 500, true );

}

void user_rf_pre_init()

{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值