[ESP32]esp_timer使用

[ESP32]esp_timer使用

ESP32的高精度定時器API接口允許用戶在一個硬件定時器上創建多個軟件定時器,免去了複雜的硬件操作和APB頻率因工作模式不同而變化帶來的定時不准問題。
軟件定時器可以精確到微秒(us)級別,可以週期觸發或觸發一次。

使用步驟爲:

  1. 設置timer的回調函數與名稱(esp_timer_create_args_t)
  2. esp_timer_create()創建定時器
  3. 啓動定時器(esp_timer_start_periodic/esp_timer_start_once)

1. 設置timer的回調函數與名稱

通過esp_timer_create_args_t結構體設置:

typedef struct {
    esp_timer_cb_t callback;        //!< Function to call when timer expires
    void* arg;                      //!< Argument to pass to the callback
    esp_timer_dispatch_t dispatch_method;   //!< Call the callback from task or from ISR
    const char* name;               //!< Timer name, used in esp_timer_dump function
} esp_timer_create_args_t;
void on_1s_timer(void *args) {
    ESP_LOGI("timer", "timer:%lld", esp_timer_get_time());
}
esp_timer_create_args_t timer_1s_args = {
    .callback = &on_1s_timer,
    .name = "timer_1s",
};

2. 創建timer

原型函數:

esp_err_t esp_timer_create(const esp_timer_create_args_t* create_args,
                           esp_timer_handle_t* out_handle)
ESP_ERROR_CHECK(esp_timer_create(&timer_1s_args, &timer_1s));

3. 啓動定時器

函數原型:

esp_err_t esp_timer_start_periodic(esp_timer_handle_t timer, uint64_t period);
esp_err_t IRAM_ATTR esp_timer_start_once(esp_timer_handle_t timer, uint64_t timeout_us)

使用方法:

ESP_ERROR_CHECK(esp_timer_start_periodic(timer_1s, 1000000));	// timer: 1s

timer的其它函數

esp_err_t IRAM_ATTR esp_timer_stop(esp_timer_handle_t timer);
esp_err_t esp_timer_delete(esp_timer_handle_t timer);
int64_t IRAM_ATTR esp_timer_get_time(void);	// 從esp timer初始化之後經過的微秒(us)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章