文章目录

  • 一、前言
  • 二、VSCODE + ESP-IDF
    • 2.1、快速创建项目
    • 2.2、选择串口通道,ESP芯片型号
  • 三、代码
    • 3.1、头文件
    • 3.2、全局变量
    • 3.3、app_main( )函数
    • 3.4、定时器回调函数
    • 3.5、实验代码
  • 四、相关API
    • 4.1、函数esp_timer_init( )
    • 4.2、函数esp_timer_create( )
    • 4.3、函数esp_timer_start_periodic( )
    • 4.4、变量类型esp_timer_handle_t
    • 4.5、变量类型esp_timer_create_args_t

一、前言


ESP-IDF实际上是基于freeRTOS的SDK,官网介绍freeRTOS还经过剪裁与优化。

使用过RTOS的同学肯定知道其实RTOS也有定时器(专业点来说它是软定时器),跟基于一定频率轮询的任务Task相比,RTOS的软定时器一般优先级较低。本次实验使用ESP32的16bit高分辨率定时器,它是基于硬件定时器的。硬件定时器的实时性肯定比软件定时器好得多!
以下摘自ESP官网:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/system/esp_timer.html

总结:

  • 官方直接限制了定时器的最高频率是20kHZ(50us),官方的建议是使用外部的硬件外设来解决,或者使用DMA。简单来说,esp32不能用于高频(超过20kHz)的中断应用。
  • esp_timer跟freeRTOS的定时器一样,可以提供一次性的定时器与周期性的定时器。区别在于esp_timer的优先级高,freeRTOS的定时器的优先级低。
  • esp_timer是使用64位硬件定时器实现的API。
  • 定时器回调函数尽可能做少的工作。(跟学习stm32的硬件定时器时一样)

实验的现象:
闪烁的频率增加至10Hz(100ms)

ESP-IDF Monitor打印出来的信息:

二、VSCODE + ESP-IDF


2.1、快速创建项目

按照上一章节的方式创建一个sample_project的模版。

2.2、选择串口通道,ESP芯片型号

还是按照上一章节的方式来选择串口通道与ESP芯片信号

三、代码


3.1、头文件


增加一个头文件esp_timer.h

3.2、全局变量

  • 声明定时器1的回调函数
  • 定义定时器1的句柄
  • 定义定时器1参数结构体

3.3、app_main( )函数


创建定时器之前,先调用esp_timer_init( )初始化所有定时器。

3.4、定时器回调函数

3.5、实验代码

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "esp_timer.h"/* 定时器1回调函数 */
void timer1_Callback(void *arg);static uint8_t s_led_state = 0;
static const char *TAG = "blink LED & 16bit timer";
static esp_timer_handle_t timer1_handler;  /* 定时器1的句柄 *//* 定时器1的参数 */
static esp_timer_create_args_t timer_Once_Obj = {.name = "Timer_NUM_1",          /* 定时器的名称 */.arg = NULL,                    /* 传递给回调函数的参数 */.callback = &timer1_Callback,   /* 回调函数 */
};void app_main(void)
{ESP_LOGI(TAG, "Example configured to blink GPIO LED!");/* 复位GPIO的状态 */gpio_reset_pin(26);gpio_reset_pin(27);/* 设置GPIO为输出模式 */gpio_set_direction(26,GPIO_MODE_OUTPUT);gpio_set_direction(27,GPIO_MODE_OUTPUT);/* 初始化定时器 */esp_timer_init(); /* 创建定时器1 */esp_timer_create(&timer_Once_Obj,&timer1_handler);/* 启动定时器1(周期性) */esp_timer_start_periodic(timer1_handler,100 * 1000);while(1){vTaskDelay(300 / portTICK_PERIOD_MS);   /* 延时300ms */}}/* 定时器1回调函数 */
void timer1_Callback(void *arg)
{int64_t get_time = esp_timer_get_time();    /* 获取自启动以来的时间(单位us) */ESP_LOGI(TAG, "Time is : %lld", get_time);  /* 通过log打印出来 */ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");gpio_set_level(26,s_led_state);         /* GPIO26输出电平 */gpio_set_level(27,s_led_state);         /* GPIO27输出电平 */s_led_state = !s_led_state;             /* 取反LED的状态 */
}

四、相关API


4.1、函数esp_timer_init( )

4.2、函数esp_timer_create( )


如果定时器不再需要时,调用esp_timer_delete( )将其删除。

4.3、函数esp_timer_start_periodic( )

4.4、变量类型esp_timer_handle_t


简单来说,就是用于创建定时器对象的句柄。

static esp_timer_handle_t timer1_handler;  /* 定时器1的句柄 */

4.5、变量类型esp_timer_create_args_t

/* 定时器1的参数 */
static esp_timer_create_args_t timer_Once_Obj = {.name = "Timer_NUM_1",          /* 定时器的名称 */.arg = NULL,                    /* 传递给回调函数的参数 */.callback = &timer1_Callback,   /* 回调函数 */
};

ESP32 + ESP-IDF |GPIO 02 - 使用高分辨率定时器,每100ms时间间隔驱动外部两个LED灯闪烁相关推荐

  1. ESP32 + ESP-IDF |GPIO 01 - 驱动外部两个LED灯,以每300ms的时间间隔闪烁

    文章目录 一.前言 二.VSCODE + ESP-IDF 2.1.快速创建项目 2.2.选择串口通道,ESP芯片型号 三.代码 3.1.main.c 3.1.1.头文件 3.1.2.全局变量 3.1. ...

  2. NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁

    在前面的文章中,我已经想大家介绍了NVIDIA Jetson Nano这个板子.今天我将给大家介绍NVIDIA Jetson Nano最重要的一个接口–GPIO.Jetson Nano 和树莓派一样作 ...

  3. STM32定时器控制LED灯闪烁及PWM练习

    一.STM32定时器控制LED灯闪烁 1.相关配置 1)配置RCC和SYS 2)配置IO 配置PC15,并命名为D1. 3)配置定时器 选定时器2,配置Clock Source为Internal Cl ...

  4. STM32学习 3:GPIO管脚配置与第一个STM32实验:LED灯闪烁

    STM32学习 3:GPIO管脚配置与第一个STM32实验:LED灯闪烁 1,GPIO管脚简介与配置 1.1GPIO框图 1.2GPIO不同模式 1.3 GPIO寄存器 1.4 GPIO库函数配置 2 ...

  5. STC8H8K64U——定时器T0(LED灯闪烁)

    LED灯闪烁 使用定时器实现延时实现LED灯闪烁,定时 5ms,count 计数50定时 250ms #include <STC8H.H>sbit LED = P2^0; unsigned ...

  6. 中断系统应用实例(1)用定时器T1工作方式1控制两个LED以不同周期闪烁

    1.控制目标 利用定时器T1工作方式1控制两个LED以不同周期闪烁,使得LED1每秒闪烁4次(即周期为250ms),LED2每秒闪烁1次(即周期为1s). 2.控制分析 2.1 LED侧分析 若要使L ...

  7. AT89C52利用定时器控制单个led灯闪烁

    AT89C52利用定时器控制单个led灯闪烁 keil芯片选择AT89C52 新建一个.c文件,将代码拷贝进去,然后保存. 然后将保存的.c文件加载到工程项目里面去. 设置好生产hex文件,就可以编译 ...

  8. STC15单片机-GPIO模式介绍以及LED灯闪烁

    GPIO 1.说明 GPIO,英文全称 General-purpose input/output,即通用型输入输出,是单片机中最常用的外设之一. 2.设置模式 ​ STC15系列单片机最多有62个I/ ...

  9. 实例2:树莓派GPIO控制外部LED灯闪烁

    实例2:树莓派GPIO控制外部LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派. 通过树莓派GPIO操作的学习,熟悉GPIO的读写控制. 通过 ...

最新文章

  1. 柏拉图-理想国(西方哲学的源头)-教你如何思考人生 思考世界 思考社会
  2. 2010年上半年计算机专业技术资格考试工作安排
  3. VTK:将点转换为字形用法实战
  4. 全屏的三栏div+css布局示例
  5. iOS- 关于AVAudioSession的使用——后台播放音乐
  6. sql if 和insert_拼多多面试:Mybatis是如何实现SQL语句复用功能的?
  7. 判断单链表是否带环?若带环,求环的长度?求环的入口点?(C语言)
  8. Spring、SpringMVC、Spring Boot、Spring Cloud 概念、关系及区别
  9. 起步 - 安装 Git
  10. ajax head带参数两次请求
  11. Spring Boot 注解描述
  12. Java初学者也可以实现的图书系统小练习
  13. ssh+dwr实现级联操作
  14. 计算机云计算论文范文,云计算环境下计算机管理系统论文
  15. 如何借助SVG+CSS用2个小时撸完一个网易云音乐的动效海报(可控制速度)
  16. Quantopian投资组合和绩效分析工具:Pyfolio
  17. 重带电粒子的能量歧离(energy straggling)
  18. stm32f105vct6例程_STM32F105VCT6_USB_TEST
  19. 美迪网站推广教你怎样写原创文章
  20. clickhouse SLB 服务搭建

热门文章

  1. linux socket函数详解,linuxSocket_函数.doc
  2. PPT导入视频裁剪后,如何裁剪后的视频另存为保存下来?
  3. 曾经开发的一个武冈市市民意见采集系统
  4. 使用css画太极,CSS画太极阴阳图
  5. C++ fgets()函数
  6. 利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声
  7. Leetcode_123_Best Time to Buy and Sell Stock III
  8. MemSQL性能测试结果
  9. MPC(模型预测控制)_附matlab例程
  10. Python人工智能基础到实战课程-北方网视频