104-ESP32_SDK开发-软件定时器esp_timer
2023-03-20 15:39:55 时间
说明
软件定时器其实是在硬件定时器的基础上实现的.
实际上是内部运行着一个1us的硬件定时器,然后软件定时器的回调函数
都放到了这个1us定时器的中断函数里面.
一张图解决
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "driver/timer.h"
#include "esp_timer.h"
#define gpio_pin 25
esp_timer_handle_t esp_timer_handle_t1 = 0;
/*定时器中断函数*/
void esp_timer_cb(void *arg){
/*设置gpio输出高低电平*/
gpio_set_level(gpio_pin, 1-gpio_get_level(gpio_pin));
}
void gpio_init(void){
gpio_config_t io_conf;
//禁止中断
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
//输入输出模式
io_conf.mode = GPIO_MODE_INPUT_OUTPUT;
//配置要设置的引脚
io_conf.pin_bit_mask = (unsigned long long)1<<gpio_pin;
//禁止下拉
io_conf.pull_down_en = 0;
//禁止上拉
io_conf.pull_up_en = 0;
//配置gpio(不设置上下拉默认输出低电平)
gpio_config(&io_conf);
}
void app_main(void)
{
gpio_init();//初始化gpio
//定时器结构体初始化
esp_timer_create_args_t esp_timer_create_args_t1 = {
.callback = &esp_timer_cb, //定时器回调函数
.arg = NULL, //传递给回调函数的参数
.name = "esp_timer" //定时器名称
};
/*创建定时器*/ //初始化参数 //定时器句柄,用于后期对定时器做其它操作
esp_err_t err = esp_timer_create(&esp_timer_create_args_t1, &esp_timer_handle_t1);
/*以循环方式启动定时器*/ //定时器句柄 //us级定时,1000*1000就是1s
err = esp_timer_start_periodic(esp_timer_handle_t1, 1000 * 1000);
/*单次启动*/
//err = esp_timer_start_once(esp_timer_handle_t1, 1000 * 1000)
if(err == ESP_OK){
printf("ok!
");
}
}
其它
相关文章
- python3 os中如何回到当前目录?
- 使用python3 os后程序无法运行怎么办?
- python3 re如何快速编译?
- php按值传递和引用传递的比较
- 如何停止spyder中运行的程序
- php文件用什么软件打开
- anaconda 安装好打不开怎么办
- python django框架中的单元测试如何执行?
- pycharm代码不高亮显示怎么办
- ps金属质感怎么做
- ps教程之怎么用ps抠图头发丝
- 怎么在jupyter安装包?
- pycharm怎么设置代码自动提示
- python3处理excel文本内容代码怎么写?
- 代理IP为什么使用socks5速度会快的多呢
- php文件怎么运行
- php中Larave框架中间件是什么?
- php中如何进行数组的降序或升序?
- 怎样暂停jupyter的运行?
- pycharm怎么返回(代码跳转回退)