- 如果使用 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
}
来源:CSDN
作者:imxlw00
链接:https://blog.csdn.net/imxlw00/article/details/104736163