#软件延时
##毫秒级别中断
os_timer_t test_timer; //定义定时 如同int i 一样;
char * buf = "helloworld";
void ICACHE_FLASH_ATTR USE_Taxt(void *arg) //定义回调函数
{
os_printf("%s",arg); //使用串口0打印数据
}
void user_init(void) {//主函数
os_timer_setfn(&test_timer,USE_Taxt,buff); //回调函数 一旦延时到了执行此函数 USE_Taxt需要调用得函数 buff为给回调函数传递得参数
os_timer_arm(&test_timer,500,1); //500ms执行一次 1表示无限循环 0表示只循环一次
}
微秒级别中断
#define USE_US_TIMER //调用毫秒中断必须定义USE_US_TIMER
os_timer_t test_timer; //定义定时 如同int i 一样;
char * buf = "helloworld";
void USE_Taxt(void *arg) //定义回调函数
{
os_printf("%s",arg); //使用串口0打印数据
}
void ICACHE_FLASH_ATTR user_init(void) {//主函数
system_timer_reinit(); //初始化毫秒级别得 放在毫秒初始化前边
os_timer_setfn(&test_timer,USE_Taxt,buff); //回调函数 一旦延时到了执行此函数 USE_Taxt需要调用得函数 buff为给回调函数传递得参数
os_timer_arm_us(&test_timer,5000,1); //500ms执行一次 1表示无限循环 0表示只循环一次
}
毫秒级别和微妙级别不能同时调用
对于同一个timer,os_timer_srm或os_timer_arm_us不能重复调用,必须先os_timer_disarm。
os_timer_setfn必须在timer未使能的情况下调用,在os_timer_arm或os_timer_arm_us之前或os_timer_disarm之后
#硬件定时中断
/*--------------------------------------------------------------*/
/*函数功能:定时器回调函数 */
/*参 数:无 */
/*返 回:无 */
/*注 意:硬件定时器的回调函数,不能使用 ICACHE_FLASH_ATTR宏 */
/*-------------------------------------------------------------*/
void timer_testTask(void)
{
os_printf("自动填装测试\r\n"); //打印到串口
}
void ICACHE_FLASH_ATTR user_init(void) {//主函数
/*使用自动填装模式,每次定时器到时的时候,都会按照500ms的设置,再次定时500ms*/
hw_timer_init(1 ,1); //使用NMI中断源,自动填装FRC1_SOURCE = 0, 低级中断 NMI_SOURCE = 1, 高级中断 第二个1为无线循环
hw_timer_set_func(timer_testTask); //设置回调函数
hw_timer_arm(500*1000); //单位是us,定时的最大值1677.721ms,在此定时500ms
}
注意调用硬件定时中断 不能调用 wifi_set_sleep_type(LIGT_SLEEP); 需要将自动睡眠模式变为 Light-sleep。因为 Light-sleep会停止cpu但不会停止NMI中断;
os_delay_us(us); 最大值延时65535us;