- 简述
- ESP8266EX有两个定时器
- 软件定时器:任务中执行
- 硬件定时器:硬件中断源
- 软件定时器:
- 定时器的函数在任务中被执行,
- 优先级的关系,任务定时器会被其他任务中断,定时时间不准确
- 软件定时器设置前必须先关闭定时器,设置完毕后再打开定时器
- 如未调⽤用 system_timer_reinit,可⽀支持范围 5 ~ 0x68D7A3(5~6870947ms)
- 如调⽤用了了 system_timer_reinit,可⽀支持范围 100 ~ 0x689D0(100~428496ms)
- 硬件定时器:
- 使用NMI中断源,定时器优先级最高,可打断其他ISR
- 使用FRC1中断源,该定时器无法打断其他ISR
- 定时器与PWM共用同一个硬件定时器,实际应用只能2选1
- 使用硬件定时器,不要设置休眠,不支持休眠唤醒
- ESP8266EX有两个定时器
- 例程
- 软件定时器
//软件定时器的回调函数 void ICACHE_FLASH_ATTR os_timer1_cb(void) { F_Led = ! F_Led; //标志位翻转 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), F_Led); //输出端口引脚状态翻转 os_printf("\r\n-----------os_timer1_cb---------\r\n"); } //软件定时器初始化 //参数1:定时时长 //参数2:与定时器是否重复 void ICACHE_FLASH_ATTR os_timer1_init(u32 ms, bool flag) { //关闭软件定时器 os_timer_disarm(&os_timer_1); //设置定时器 //参数1:设置的定时器 //参数2:回调函数,需要强制类型转换 //参数3:回调函数参数 os_timer_setfn(&os_timer_1, (os_timer_func_t *)os_timer1_cb, NULL); //启动定时器 //参数1:使能的定时器 //参数2:定时时长 //参数3:1重复,0只用一次 os_timer_arm(&os_timer_1, ms, flag); // 【如未调用system_timer_reinit,可支持范围:[5ms ~ 6,870,947ms]】 // 【如果调用system_timer_reinit,可支持范围:[100ms ~ 428,496 ms]】 }
- 硬件定时器
//硬件定时器的回调函数 void hw_timer1_cb(void) { F_Led = ! F_Led; //标志位翻转 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), F_Led); //输出端口引脚状态翻转 os_printf("\r\n-----------hw_timer1_cb---------\r\n"); } /****************************************************************************** * FunctionName : user_init * Description : entry of user application, init user function here * Parameters : none * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR user_init(void) { uart_init(115200,115200); //设置串口1,串口2波特率为115200 os_printf("\r\n--------------------------------------------\r\n"); os_printf("SPT SDK Project: %s \r\n", ProjectName); //打印项目名称 os_printf("SPT SDK version: %s \r\n", system_get_sdk_version()); //打印版本信息 os_printf("\r\n--------------------------------------------\r\n"); uart0_sendStr("\r\n Hello World !!! \r\n"); /*gpio */ PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4); //管脚功能选择 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1); //输出高电平 //硬件定时器 //初始化硬件定时器 //参数1:选择FCR1中断源 //参数2:自动装载 hw_timer_init(NULL, 1); //注册回调函数 hw_timer_set_func(hw_timer1_cb); //使能硬件定时器 hw_timer_arm(500000); //定时500ms,默认单位是us }
- 软件定时器
- 总结:
- 精度要求高:硬件定时器
- 程序使用RTOS:软件定时器
- 文档资料:
- ESP8266 Non-OS SDK API参考
- ESP8266 技术参考手册
- 工具篇:
- 编译器:安信可一体化开发环境(Eclipse),需要安装JAVA环境
- 烧录工具:flash_download_tools_v3.6.6.zip
- http://wiki.ai-thinker.com/tools
- 固件
- AT指令:通过串口发送AT指令(串口数据)到ESP8266
- SDK编程:8266内部集成了32bit的处理器,通过SDK编程实现所需功能
- 分类:带RTOS的SDK和不带RTOS的SDK
- SDK版本:ESP8266_NONOS_SDK 2.2.0
- 硬件平台
- 技新 物联网开发板_ESP8266_V1.0
- 安信可 ESP8266模块:ESP12F
- 电源:3.3V
- 晶振:26Mhz
- 外部Flash:4MB = = 32Mbit
- 4MB Flash => 0x000 000 ~ 0x3FF FFF
- 扇区编号:0x000~0x3FF【Flash扇区 == 4KB】
- 外部射频电路:PCB板载天线
- 参考资料:
【3】WiFi——————ESP8266 SDK编程 之 定时器
最新推荐文章于 2023-04-28 07:00:00 发布