LED 控制 (LEDC) 外设主要用于控制 LED 的强度,尽管它也可用于生成用于其他目的的 PWM 信号。
ESP32 SoC 具有 6 到 16 个通道(在 SoC 上有所不同,见下表),可以生成独立的波形,例如可用于驱动 RGB LED 设备。
ESP32 SoC | Number of LEDC channels |
---|---|
ESP32 | 16 |
ESP32-S2 | 8 |
ESP32-S3 | 8 |
ESP32-C3 | 6 |
ESP32-C6 | 6 |
ESP32-H2 | 6 |
此功能用于设置 LEDC 外设时钟源。必须在使用任何 LEDC 通道之前调用。如果 SoC 支持,则默认时钟源为 XTAL clock (LEDC_USE_XTAL_CLK),否则为 AUTO clock (LEDC_AUTO_CLK)。
bool ledcSetClockSource(ledc_clk_cfg_t source);
如果设置 clock source 成功,此函数将返回 true,否则将返回 false。
该函数用于获取 LEDC 外设时钟源。
ledc_clk_cfg_t ledcGetClockSource(void);
此函数将返回 LEDC 外设的时钟源。
此功能用于设置给定频率和分辨率的 LEDC 引脚。将自动选择 LEDC 通道。
bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
如果配置成功,此函数将返回 true。如果返回 false,则出错且未配置 LEDC 通道。
此功能用于设置给定频率、分辨率和通道的 LEDC 引脚。将多个 pins 连接到同一个 channel 将使它们共享相同的 duty cycle。给定频率,如果已配置通道,则将忽略分辨率。
bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, int8_t channel);
如果配置成功,此函数将返回 true。如果返回 false,则出错且未配置 LEDC 通道。
此功能用于设置 LEDC 引脚的占空比。
bool ledcWrite(uint8_t pin, uint32_t duty);
如果设置 duty 成功,此函数将返回 true。如果返回 false,则发生错误且未设置 duty。
此功能用于设置 LEDC 通道的占空比。
bool ledcWriteChannel(uint8_t channel, uint32_t duty);
如果设置 duty 成功,此函数将返回 true。如果返回 false,则发生错误且未设置 duty。
此函数用于获取 LEDC 引脚的配置占空率。
uint32_t ledcRead(uint8_t pin);
此函数将返回所选 LEDC 引脚的占空比设置。
此函数用于获取 LEDC 通道的配置频率。
uint32_t ledcReadFreq(uint8_t pin);
此函数将返回为所选 LEDC 引脚配置的频率。
此功能用于将 LEDC 引脚设置为选定频率上的 50% PWM 音调。
uint32_t ledcWriteTone(uint8_t pin, uint32_t freq);
此函数将返回为 LEDC 引脚设置的频率。如果返回 0,则发生错误,并且未配置 LEDC 引脚。
此功能用于将 LEDC 引脚设置为特定音符。
uint32_t ledcWriteNote(uint8_t pin, note_t note, uint8_t octave);
NOTE_C | NOTE_Cs | NOTE_D | NOTE_Eb | NOTE_E | NOTE_F |
NOTE_Fs | NOTE_G | NOTE_Gs | NOTE_A | NOTE_Bb | NOTE_B |
此函数将根据音符和八度输入返回为 LEDC 引脚配置的频率。如果返回 0,则发生错误,并且未配置 LEDC 通道。
此功能用于将引脚从 LEDC 上分离。
bool ledcDetach(uint8_t pin);
如果分离成功,则此函数返回 true。如果返回 false,则发生错误,并且 pin 未分离。
此功能用于设置 LEDC 引脚的频率。
uint32_t ledcChangeFrequency(uint8_t pin, uint32_t freq, uint8_t resolution);
此函数将返回为 LEDC 通道配置的频率。如果返回 0,则发生错误,并且未设置 LEDC 通道频率。
此功能用于设置 LEDC 引脚的反相输出。
bool ledcOutputInvert(uint8_t pin, bool out_invert);
如果设置反转输出成功,则此函数返回 true。如果返回 false,则发生错误并且未设置反相输出。
此功能用于设置和启动 LEDC 引脚的淡入淡出。
bool ledcFade(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms);
如果配置成功,此函数将返回 true。如果返回 false,则发生错误,并且未配置/启动 LEDC 淡入淡出。
此功能用于设置和启动带中断的 LEDC 引脚的淡入淡出。
bool ledcFadeWithInterrupt(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms, void (*userFunc)(void));
如果配置成功,此函数将返回 true,并淡出启动。如果返回 false,则发生错误,并且未配置/启动 LEDC 淡入淡出。
此函数用于使用参数设置和启动带中断的 LEDC 引脚的淡入淡出。
bool ledcFadeWithInterruptArg(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms, void (*userFunc)(void*), void * arg);
如果配置成功,此函数将返回 true,并淡出启动。如果返回 false,则发生错误,并且未配置/启动 LEDC 淡入淡出。
此函数用于在引脚上写入模拟值 (PWM 波形)。它与 Arduinos analogWrite 功能兼容。
void analogWrite(uint8_t pin, int value);
此功能用于设置所选 analogWrite 引脚的分辨率。
void analogWriteResolution(uint8_t pin, uint8_t resolution);
此功能用于设置所选 analogWrite 引脚的频率。
void analogWriteFrequency(uint8_t pin, uint32_t freq);
LEDC fade example: LEDC 淡化示例:
examples/AnalogOut/LEDCFade/LEDCFade.ino
LEDC software fade example:
LEDC 软件淡化示例:
examples/AnalogOut/LEDCSoftwareFade/LEDCSoftwareFade.ino
LEDC 写入 RGB 示例:
examples/AnalogOut/ledcWrite_RGB/ledcWrite_RGB.ino