7、Esp8266 硬件中断定时器器

  • 如果使用 NMI 中断源,且为自动填装的定时器,调用 hw_timer_arm 时参数 val 必须大于 100。
  • 如果使用 NMI 中断源,那么该定时器将为最高优先级,可打断其他 ISR。
  • 如果使用 FRC1 中断源,那么该定时器无法打断其他 ISR。

API

在这里插入图片描述
在这里插入图片描述

实验代码

定时500ms

// LED初始化
void ICACHE_FLASH_ATTR LED_Init_JX(void)
{
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,	FUNC_GPIO4);	// GPIO4设为IO口

	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);						// IO4 = 1
}
// 硬件定时器中断回调函数【注意:中断函数前不要有"ICACHE_FLASH_ATTR"宏】
void HW_Timer_INT(void)		// ②:硬件定时器中断回调函数
{
	F_LED = !F_LED;
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),F_LED);		// LED状态翻转

	os_printf("\r\n--- HW_Timer_INT ---\r\n");	// 进入硬件定时器中断回调函数标志
}
void ICACHE_FLASH_ATTR user_init(void)
{
	uart_init(115200,115200);	// 初始化串口波特率
	os_delay_us(10000);			// 等待串口稳定
	os_printf("\r\n=================================================\r\n");
	os_printf("\t Project:\t%s\r\n", ProjectName);
	os_printf("\t SDK version:\t%s", system_get_sdk_version());
	os_printf("\r\n=================================================\r\n");
	LED_Init_JX();		// LED初始化
    // 硬件定时器初始化【FRC1_SOURCE==0、NMI_SOURCE=1】
    //--------------------------------------------------------------------------------------------
	hw_timer_init(0, 1);				// ①:初始化硬件定时器【参数1:中断源】【参数2:是否重复】
	hw_timer_set_func(HW_Timer_INT);	// ③:注册硬件定时器中断回调函数
	hw_timer_arm(500*1000);				// ④:设置定时器参数(//单位是us,定时的最大值1677.721ms)在此定时500ms
}

在这里插入图片描述

发布了274 篇原创文章 · 获赞 97 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/imxlw00/article/details/104736163