esp32 8266 定时器中断怎么写
时间: 2024-05-30 22:06:31 浏览: 181
ESP8266TimerInterrupt:此库使您可以使用基于ESP8266的板上的硬件定时器中断。 现在,它支持16个基于ISR的计时器,而仅消耗1个硬件计时器。 计时器的间隔很长(以毫秒为单位)。 最重要的功能是它们是基于ISR的计时器。 因此,它们的执行不会受到行为不正常的功能或任务的阻止。 此重要功能对于关键任务绝对是必需的
ESP32和ESP8266都有定时器模块,可以用于定时任务的实现。以下是ESP32和ESP8266定时器中断的写法:
ESP32的定时器中断写法:
1. 首先需要选择一个定时器模块(共有4个),并初始化它。
2. 设置定时器的预分频、计数器值和计时周期,以确定中断触发的时间。
3. 编写中断处理函数,并将其注册到定时器中断处理程序中。
4. 启动定时器。
以下是一段ESP32定时器中断的示例代码:
```
#include <esp_timer.h>
#define TIMER_DIVIDER 80 // 定时器预分频
#define TIMER_SCALE (TIMER_BASE_CLK / TIMER_DIVIDER) // 定时器计数频率
#define TIMER_INTERVAL_SEC (3.4179) // 定时器中断间隔时间,单位为秒
#define TIMER_INTERVAL_US (TIMER_INTERVAL_SEC * 1000000) // 定时器中断间隔时间,单位为微秒
void IRAM_ATTR timer_isr(void *para) {
// 在这里编写定时器中断处理函数的代码
}
void init_timer() {
esp_timer_handle_t timer;
esp_timer_create_args_t timer_cfg = {
.callback = &timer_isr,
.name = "timer",
.arg = NULL
};
esp_timer_create(&timer_cfg, &timer);
esp_timer_start_periodic(timer, TIMER_INTERVAL_US);
}
void app_main() {
init_timer();
}
```
ESP8266的定时器中断写法:
1. 首先需要选择一个定时器模块(共有2个),并初始化它。
2. 设置定时器的预分频、计数器值和计时周期,以确定中断触发的时间。
3. 编写中断处理函数,并将其注册到定时器中断处理程序中。
4. 启动定时器。
以下是一段ESP8266定时器中断的示例代码:
```
#include <ets_sys.h>
#include <osapi.h>
#include <gpio.h>
#define TIMER_INTERVAL_MS 500 // 定时器中断间隔时间,单位为毫秒
os_timer_t timer;
void timer_isr(void *para) {
// 在这里编写定时器中断处理函数的代码
}
void init_timer() {
os_timer_setfn(&timer, (os_timer_func_t *)timer_isr, NULL);
os_timer_arm(&timer, TIMER_INTERVAL_MS, true);
}
void user_init(void) {
init_timer();
}
```
阅读全文