重装Arduino IDE后ESP32出现LEDC频率配置错误求助
ESP32 LEDC 频率与分辨率不兼容报错解决方案
之前在ESP32上正常运行的LEDC代码,重装系统和新版Arduino IDE后部署时出现以下错误:
E (76891) ledc: requested frequency and duty resolution can not be achieved, try reducing freq_hz or duty_resolution. div_param=63
相关代码片段:
const int PinCh1 = 13; const int PinCh2 = 15; const int freq = 5000; const int Channel1 = 0; const int Channel2 = 1; const int resolution = 16; ledcSetup(Channel1, freq, resolution); ledcSetup(Channel2, freq, resolution);
问题原因
新版Arduino-ESP32核心库调整了LEDC模块的时钟计算逻辑,ESP32的LEDC硬件受限于时钟分频范围,5000Hz频率搭配16位分辨率的参数组合,已经超出了当前核心库允许的硬件支持范围。
解决方案
- 降低分辨率:如果对精度要求不是极端苛刻,把
resolution从16改为12或10,5000Hz频率就能正常适配。修改后代码:const int resolution = 12; // 可根据实际需求选10-15之间的数值 - 降低频率:必须保留16位分辨率的话,把
freq降到1000Hz左右(可根据实际测试微调):const int freq = 1000; - 手动配置时钟分频:需要同时保留较高频率和分辨率的话,可手动指定LEDC的时钟分频系数。比如先设置分频再初始化通道:
ledcSetClkDiv(Channel1, 8); // 分频系数需根据ESP32时钟源计算,这里仅作示例 ledcSetup(Channel1, 5000, 16); ledcSetClkDiv(Channel2, 8); ledcSetup(Channel2, 5000, 16);
内容的提问来源于stack exchange,提问作者lucian_v
相关产品推荐
相关产品推荐

