这个实验的功能演示 ESP32 定时器的使用方法。 这个实验的代码为工程“3_10_timer”目录。
3.10.1. 实验内容
(1) 学习 LED 灯控制
(2) 学习 ESP32 定时器库函数使用方法
(3) 根据定时器控制红灯闪烁
3.10.2. 硬件原理
这个实验使用到的硬件是彩灯上的红灯,如何实现控制返回看 3.3.2 节即可。
3.10.3. ESP32 定时器函数介绍
定时器的使用流程就是定时器初始化、创建和启动,启动完成后,会周期执行回调函数。在有些使用 场合有可能会需要需要停止和删除定时器,框图如图:
定时器创建和初始化
创建定时器函数定义:
esp_err_t esp_timer_create(const esp_timer_create_args_t* create_args,
esp_timer_handle_t* out_handle);
参数说明:
esp_timer_create_args_t* create_args:定时器初始化参数,具体的定义请往下看 esp_timer_handle_t* out_handle:这是返回值,创建的定时器的句柄
返回值:ESP_OK(成功) 。
定时器启动
定时器周期启动函数定义:
esp_err_t esp_timer_start_periodic(esp_timer_handle_t timer, uint64_t period); 参数说明:
esp_timer_handle_t timer:定时器句柄
uint64_t period:定时器的周期,单位为微秒,如果定时 1 秒写 1000*1000。 返回值:ESP_OK(成功)。
定时器单次启动函数定义:
esp_err_t esp_timer_start_once(esp_timer_handle_t timer, uint64_t timeout_us); 参数说明:
esp_timer_handle_t timer:定时器句柄
uint64_t timeout_us:定时器的周期,单位为微秒,如果定时 1 秒写 1000*1000。 返回值:ESP_OK(成功)。
定时器停止
函数定义:
esp_err_t esp_timer_stop(esp_timer_handle_t timer); 参数说明:
esp_timer_handle_t timer:定时器句柄 返回值:ESP_OK(成功) 。
定时器删除
函数定义:
esp_err_t esp_timer_delete(esp_timer_handle_t timer); 参数说明:
esp_timer_handle_t timer:定时器句柄 返回值:ESP_OK(成功) 。
3.10.4. 代码讲解
使用 vs code 展开本实验的工程目录,如下图:
我们的这个实验,定时器的代码是写在源文件 app_main.c 里,led 文件夹是关于 LED 的驱动代码,LED 的驱动代码在 3.3 章有比较详情的讲解。
我们打开源文件 app_main.c 查看主函数入口 app_main(),在这个函数里初始化了 LED 灯,创建和启动 了定时器:
//用户函数入口,相当于 main 函数
void app_main() {
initLed();//LED 初始化
//定时器结构体初始化 esp_timer_create_args_t fw_timer =
{
.callback =
//定时器创建
esp_err_t err = esp_timer_create(&fw_timer, &fw_timer_handle);
//周期定时器启动
err = esp_timer_start_periodic(fw_timer_handle, 1000 * 1000);//1 秒回调 if(err == ESP_OK)
{
printf("timer1 cteate and start ok!\r\n");
}
定时器的回调函数 1 秒执行 1 次,根据 led_flag 标志决定是亮灯还是灭灯,如下图:
void fw_timer_cb(void *arg)
{
//根据 LED 状态闪灯 if(led_flag>0)
{
led_red(LED_ON); led_flag=0;
}
else
{
led_red(LED_OFF); led_flag=1;
}
}
3.10.5. 实验过程
配置下载串口、波特率、编绎和程序下载的详细过程请往回看 3.1.4,在这个实验里都是一笔带过。 (1) 把开发板通过 USB 线接到电脑上,通过设备管理器查看生成的串口。开发板在我们演示电脑上生
成的是 COM3。
(2) 在 menuconfig 菜单里配置下载程序串口。提供的例程配置的串口是 COM3,波特率为 921600。
(3) 通过 make all 编绎工程。
(4) 当编绎通过之后,使用命令 make flash 把程序下载到开发板上。或者参考 2.3.2 节,使用工具 下载。
(5) 按下开发板的复位键,让程序运行起来,观察彩灯的红灯闪烁过程。
(6) 可以修改定时器的时间,改变灯光闪烁频率。
最后推荐一款开发套件,可以手淘扫码查看。