美文网首页
物联网领域Esp8266学习之旅③ 利用 " 软件定时

物联网领域Esp8266学习之旅③ 利用 " 软件定时

作者: 半颗心脏 | 来源:发表于2017-12-01 10:12 被阅读761次

欢迎来到物联网智能家居顶量级别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()
{

}


源码下载 : https://github.com/xuhongv/StudyInEsp8266


相关文章

网友评论

      本文标题:物联网领域Esp8266学习之旅③ 利用 " 软件定时

      本文链接:https://www.haomeiwen.com/subject/louibxtx.html