Aily Blockly 辅助 ESP32-S3 开发教程2
第 6 章:定时器与 PWM
6.1 定时器概述
ESP32-S3 有2 组通用定时器,每组 2 个,共 4 个 64 位定时器,支持:
- 一次性 / 周期性定时
- 32 位预分频器
- 定时中断
在 Aily Blockly 中,定时器积木封装了底层配置,使用简单:
| 积木 | 功能 |
|---|---|
延时 [x] 毫秒 | 阻塞延时 |
延时微秒 [x] | 微秒级阻塞延时 |
当前毫秒数 | 获取系统运行时间 |
初始化定时器 [TIMx] 周期 [x]ms 中断 | 配置定时中断 |
初始化 PWM 通道 [GPIO] 频率 [x]Hz | 配置 PWM 输出 |
设置 PWM 占空比 [GPIO] 为 [x]% | 设置 PWM 占空比 |
6.2 项目:呼吸灯(PWM 渐变)
呼吸灯是 PWM 最经典的应用,通过连续改变占空比实现 LED 亮度渐变。
硬件连接
ESP32-S3 GPIO2 ───[ 220Ω ]─── LED(+) ─── GND积木程序
当启动时 ├─ 初始化 PWM 通道 GPIO2 频率 5000Hz ├─ 创建变量 brightness = 0 ├─ 创建变量 step = 5 ├─ 永远重复 │ ├─ 设置 PWM 占空比 GPIO2 为 brightness │ ├─ brightness = brightness + step │ ├─ 如果 brightness >= 100 或 brightness <= 0 │ │ └─ step = -step (改变方向) │ └─ 延时 30 毫秒生成的 C 代码
#include"driver/ledc.h"#include"freertos/FreeRTOS.h"#include"freertos/task.h"#defineLED_GPIO2voidapp_main(void){ledc_timer_config_ttimer_conf={.speed_mode=LEDC_LOW_SPEED_MODE,.duty_resolution=LEDC_TIMER_8_BIT,.timer_num=LEDC_TIMER_0,.freq_hz=5000,.clk_cfg=LEDC_AUTO_CLK};ledc_timer_config(&timer_conf);ledc_channel_config_tledc_conf={.gpio_num=LED_GPIO,.speed_mode=LEDC_LOW_SPEED_MODE,.channel=LEDC_CHANNEL_0,