Espressif IDF GPtimer 通用定时器使用c语言代码


#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/queue.h"
#include "driver/spi_master.h"
#include "driver/gpio.h"
#include "esp_timer.h"

#include "driver/gptimer.h"

static const char *TAG = "example";

int testFlag = 1;
bool test_alarm_cb_t(gptimer_handle_t timer, const gptimer_alarm_event_data_t *edata, void *user_ctx)
{
	//printf("Current testFlag = %d\n", !testFlag); // printf in the callback will cause the program to crash
	testFlag++;
	gptimer_stop(timer);

	return true;
}

void timer_init()
{
	gptimer_handle_t gptimer_handle = {0};
	gptimer_config_t config = {
		.clk_src = GPTIMER_CLK_SRC_DEFAULT,
		.direction = GPTIMER_COUNT_UP,
		.resolution_hz = 1000000,
	};
	gptimer_new_timer(&config, &gptimer_handle);
	gptimer_alarm_config_t alarm_config = {
		.alarm_count = 1000000,
		.reload_count = 0,
		.flags.auto_reload_on_alarm = true,
	};
	gptimer_set_alarm_action(gptimer_handle, &alarm_config);
	const gptimer_event_callbacks_t cbs = {
		.on_alarm = test_alarm_cb_t,
	};
	gptimer_register_event_callbacks(gptimer_handle, &cbs, NULL);
	gptimer_enable(gptimer_handle);
	gptimer_start(gptimer_handle);
}



//Main application
void app_main(void)
{

    timer_init();



    while(1) {


    	 vTaskDelay(1000 / portTICK_PERIOD_MS);
        printf("testFlag = %d\n", testFlag);
        ESP_LOGI(TAG, "Timer count value=%d", testFlag);
    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值