首先,必须明确一点,用户入口函数是voiduser_init(void)
第二点,要操作led灯,需要操作gpio口,即为小e的gpio4。
Gpio如何操作,详见ESP8266官网的“ESP8266技术参考.pdf”。
此外你还需要“ESP8266_Pin_List.xlsx”,同在ESP8266官网。
通过查看上述文档,你会发现操作gpio需要如下两个函数。
1、复用端口功能设置函数,需要将端口设置为gpio口
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
2、端口电平设置函数,将端口电平设置为高电平或者低电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);
了解这些以后,你会以为可以很简单的实现闪烁了,于是有如下程序
但是,很遗憾的是,你会发现程序会亮一会会,然后灭了,完全不会有闪烁之类的。结果使你摸不着头脑。
于是你需要更多的资料,ESP8266官网的“ESP8266 Non-OS SDKAPI参考.pdf”是接下来需要了解的。
“ESP8266 Non-OS SDK API参考.pdf”的第二章概述里面的注意事项下明确指出,任何task不能长期占用cpu,“当然,这是针对于Non-OS,它没有任务切换功能”,否则会被看门狗复位。
解决上述问题的一种方法是使用定时器,参考“ESP8266 Non-OS SDK API参考.pdf”第三章,定时器部分
我们需要用到的函数有
1、 关闭定时器,一个定时器只能启用一次,关闭定时器能够防止定时器在其他地方已经被启用,然后出现错误
os_timer_disARM(&timer1);
2、设置定时器回调函数,每定时器时间到时,都会调用这个函数
os_timer_setfn(&timer1,(os_timer_func_t *)timer_event, 1);
3、启用一个定时器,并设置定时器参数
os_timer_arm(&timer1, 500,1);
我们还需要定义一个定时器,如下
os_timer_ttimer1;
这样,我们就可以在定时器每次定时到的时候改变一次led灯的状态。
具体实现见下图
|