ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)

简介: 到了测试第6课,还没有玩过ESP32-C3的基本定时器,虽然FreeRTOS,可以使用软件定时器但是软件定时器毕竟也有不适用的时候,这个在我FreeRTOS博文中有单独说明。所以硬件定时器也得熟悉,同时附带简单用一下软件定时器。
到了测试第6课,还没有玩过ESP32-C3的基本定时器,虽然FreeRTOS,可以使用软件定时器
但是软件定时器毕竟也有不适用的时候,这个在我FreeRTOS博文中有单独说明。
所以硬件定时器也得熟悉,同时附带简单用一下软件定时器。

前言

ESP32-C3系列博文连接:

测试使用的开发板:
自己画一块ESP32-C3 的开发板(第一次使用立创EDA)(PCB到手)

测试使用的开发环境:
ESP32-C3 VScode开发环境搭建(基于乐鑫官方ESP-IDF——Windows和Ubuntu双环境)

基础篇系列相关博文:
ESP32-C3入门教程 基础篇(一、ADC采样)
ESP32-C3入门教程 基础篇(二、GPIO中断、按键驱动测试)
ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)
ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)
ESP32-C3入门教程 基础篇(五、RMT应用 — 控制SK6812全彩RGB 灯)

定时器的测试,我们直接使用串口打印看测试结果就可以了。

1、 定时器基础介绍

对于ESP32-C3 通用定时器的介绍,乐鑫的官网的说明链接如下:

乐鑫官方ESP32-C3 通用定时器部分说明

同时,在乐鑫官方 ESP32-C3 芯片手册《esp32-c3_technical_reference_manual_cn》文档第10章节中对于 TIMG 也有详细的介绍:
在这里插入图片描述
多余的话就不多说,这里主要是根据官方文档 配着代码说明一遍基本使用步骤:
在这里插入图片描述

  1. ESP32-C3有2个定时器组,每个组有2个定时器,共有4个定时器。 在这里插入图片描述
  2. 定时器使用 timer_config_t 结构体进行配置,然后初始化。

在这里插入图片描述
比如示例中的初始化:
在这里插入图片描述

  1. 初始化以后,可以直接timer_start开启定时器,当然也可以进行一些配置,再开启定时器。

使用timer_set_counter_value设置定时器的首个计数值:
在这里插入图片描述还有一些其他的专有函数也可以进行设置:
在这里插入图片描述
在示例中只用到了timer_set_counter_value,如下图:
在这里插入图片描述

  1. 警报和中断,定时器开启以后,自然会有超时处理,或者中断处理相关的内容。把这些对于需要的功能配置号以后,就可以使用timer_start开启定时器:

使用timer_set_alarm_value设置警报:
在这里插入图片描述使用timer_isr_callback_add给定时器注册中断回调函数:
在这里插入图片描述在示例中使用的方式如下:
在这里插入图片描述

至于细节和其他的问题,可以参考手册,下面我们通过官方的例程测试一下定时器的效果。

2、定时器示例测试

定时器测试我们还是先根据官方的例程展开。

2.1 IDF 示例测试

在官方的示例有关定时器的示例为 timer group,如下图:
在这里插入图片描述

这个定时器的例程功能简单,人人都可以编译下载观察,这里我根据自己的修改稍微简单的说明一下。

app_main一开始,创建了一个消息队列,然后初始化了2个定时器,其中一个设置为 3 秒报警的重装载定时器(使用的组0中的定时器0),另外一个设置为5秒报警的补充装载定时器(组1中的定时器0)。
在这里插入图片描述
定时器运行后,在while循环中,一开始就一直等待消息队列,显然只有等定时器发生了报警中断,在中断服务函数中发送了消息,while循环才接触阻塞执行下去。

接下来还会根据接收到的消息内容(示例中其实就是看是否是重装载定时器)来打印说明。
在这里插入图片描述
后面的打印都一样,获取计数器的值之类的。

如果直接用示例程序看打印结果,还是有点糊涂的,这里测试的时候我们一个定时器一个定时器来看,以便于更好的理解:
在这里插入图片描述

单独这个定时器运行的结果如下(很好理解):
在这里插入图片描述

那么来看一看另一个重装载定时器单独的测试结果:
在这里插入图片描述
从这两个单独的结果可以很好的理解定时器的运行,再加上上面的介绍,想把定时器用起来应该也不是什么难事。

2.2 软件定时器

既然使用了FreeRTOS操作系统,那么当然也可以使用软件定时器,在IDF的示例工程中,软件定时器
默认配置如下:
在这里插入图片描述

对应的在STM32CubeMX中的设置如下:
在这里插入图片描述

2.2.1 ESP-IDF 工程中查看FreeRTOS任务情况

还记得在我讲解 FreeRTOS记录的博文中,有说到过如何查看 FreeRTOS 的任务运行状态:

FreeRTOS记录(四、FreeRTOS任务堆栈溢出问题和临界区)

那么既然 ESP-IDF 工程使用的是FreeRTOS ,那么他当然也可以查看:
在这里插入图片描述

使能了任务信息查看,我们就可以打印出任务运行状态,这里,我们正好使用硬件定时器周期打印一下各任务的运行状态,简单修改一下代码,修改方式就和上面 FreeRTOS记录博文中的一样:
在这里插入图片描述
测试效果如下图(下图中应该是说错了,后来测试发现esp_timer并不是软件定时器任务……):
在这里插入图片描述

2.2.2 软件定时器简单测试

关于 FreeRTOS 软件定时器的问题可以参考博文:

FreeRTOS记录(八、FreeRTOS软件定时器)

我们这里在ESP32-C3上,也简单测试一下:

1、添加一下软件定时器头文件:
在这里插入图片描述
/2、程序中创建一个定时器,然后开启:
在这里插入图片描述
测试结果如下:
在这里插入图片描述

当初看到打印任务中有esp_timer 这个任务,以为是,后来才发现这个并不是软件定时器,至于这个是什么任务,后面学习到了再来说明。

相关文章
|
API 调度
【FreeRTOS】软件定时器的使用
【FreeRTOS】软件定时器的使用
509 0
|
Ubuntu 测试技术 开发工具
ESP32-C3入门教程 基础篇(一、ADC采样)
经过前面的折腾,设计好了自己的测试开发板 搭建好了开发环境, 然后正式开始进行功能测试了,测试顺序先从简单的开始吧,一步一步来
2147 1
ESP32-C3入门教程 基础篇(一、ADC采样)
|
C语言
C语言结构体赋值的四种方式
本文总结了C语言结构体的四种赋值方式,并通过示例代码和编译运行结果展示了每种方式的特点和效果。
1535 6
|
图形学 Python
Python绘制动态树形:实现分形树动画
Python绘制动态树形:实现分形树动画
322 0
|
编译器 C语言 Android开发
Qt5安装及组件选择(Qt 5.12)
Qt5安装及组件选择(Qt 5.12)
1787 2
|
域名解析 缓存 运维
阿里云DNS常见问题之DNS要刷新多遍才能打开如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
传感器 芯片 内存技术
自己画一块ESP32-C3 的开发板(立创EDA)(PCB到手)
记录一下第一次使用立创EDA第一次设计ESP-C3的开发板
2996 2
自己画一块ESP32-C3 的开发板(立创EDA)(PCB到手)
|
传感器 缓存 Ubuntu
ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)
测试第四课,了解ESP32-C3的 I2C 总线使用,与SHT21 温湿度传感器通讯 这一课把基础介绍放在前面,先看基本流程,再去修改代码
1267 0
ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)
|
消息中间件 Ubuntu 测试技术
ESP32-C3入门教程 基础篇(二、GPIO中断、按键驱动测试)
测试第二课,主要了解GPIO中断使用,和测试按键驱动
1766 0
ESP32-C3入门教程 基础篇(二、GPIO中断、按键驱动测试)
|
编译器 Android开发 iOS开发
[√]关于cmake的kits
[√]关于cmake的kits
343 0