遛一遛8266的定时器

一:简述

             硬件为ESP-LAUNCHER开发板(使用GPIO12)。

             要求是某一定时间指示灯状态发生改变。

             ESP8266定时功能的实现有两种方式:软件定时器和硬件定时器。

             软件定时器的接口在/ESP8266_NONOS_SDK/include/osapi.h中,由于软件定时器的任务可能被中断,或者被
其他⾼高优先级的任务延迟,所以若想获取准确的定时任务,可以选择硬件定时器,但是硬件定时器不能与PWM接口函数同时使用,因为两者共用一个硬件中断定时器。

二:软件定时器的使用

  • 首先,定义一个定时器的结构体。
  • 其次,先进行关闭定时器,因为对于同⼀个 timer,os_timer_arm 或 os_timer_arm_us 不能重复调⽤,必须先os_timer_disarm。
  • 再者,进行定时函数的回调。
  • 最后,开启定时器。
  • 程序:
static os_timer_t os_timer;//定义延时结构体

void LED_INIT()
{
	uint32 i;
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
	GPIO_DIS_OUTPUT(GPIO_ID_PIN(12));//设置IO13为输入
	i = ~GPIO_INPUT_GET(GPIO_ID_PIN(12));
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//选择指示灯IO口
	GPIO_OUTPUT_SET(GPIO_ID_PIN(12),i);
}

void  ICACHE_FLASH_ATTR user_init()//初始化
{
    uart_init(115200, 115200);//设置串口0和串口1的波特率

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//选择指示灯IO口
    GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);//默认指示灯不亮

    //软件延时函数练习
    os_timer_disarm (&os_timer);
    os_timer_setfn(&os_timer, (ETSTimerFunc *) (LED_INIT), NULL);
    os_timer_arm(&os_timer, 1000, true);

三:硬件定时器的使用

            硬件中断定时器接口位于 /ESP8266_NONOS_SDK/examples/driver_lib/hw_timer.c中。

            注意:硬件定时器的回调函数前不能添加 ICACHE_FLASH_ATTR 宏定义,中断响应不能存放在 Flash 中。

  • 首先,确定中断源以及是否重装。
  • 其次,确定定时器回调函数。
  • 最后,启动定时器。
  • 程序
void ICACHE_FLASH_ATTR user_init(void) {

	uart_init(57600, 57600);
	os_printf("SDK version:%s\n", system_get_sdk_version());

	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
	 GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);//默认指示灯不亮

	hw_timer_init(NMI_SOURCE, 0);//初始化确定使用的中断源以及是否自动填装
	hw_timer_set_func(LED_INIT);
	hw_timer_arm(500);

}

 

如有错误,请批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值