开发环境:
开发板:ESP32-C3-DEVKITM-1
IDE: Vscode esp-idf
操作系统:win10
IDF 版本:5.1.1
使用自动light sleep模式时,RMT,ledc外设工作都不正常。开启电源管理,这些外设是受动态调频影响的。手册说可以选择RMT的时钟源为RC_FAST_CLK 或 XTAL_CLK,LEDC的时钟源为LEDC_USE_RC_FAST_CLK和LEDC_USE_XTAL_CLK。
然而在LEDC使用LEDC_USE_RC_FAST_CLK和LEDC_USE_XTAL_CLK工作时会直接复位,APB时钟是正常的。
是不是要使用light sleep模式,RMT和LEDC外设必须使用手动配置唤醒源和手动进入light sleep。自动light sleep能极大降低产品功耗,有没有相关配置能在自动light sleep下能够正常使用RMT和LEDC外设?
LEDC的配置代码如下:
ledc_timer_config_t ledc_timer = {
.duty_resolution = LEDC_TIMER_13_BIT,
.freq_hz = 5000,
.speed_mode = LEDC_LS_MODE,
.timer_num = LEDC_TIMER_0,
.clk_cfg = LEDC_AUTO_CLK
};
ledc_timer_config(&ledc_timer);
ledc_channel_config_t ledc_channel_io = {
.channel = 1,
.duty = 0,
.gpio_num = BLINK_GPIO,
.speed_mode = LEDC_LS_MODE,
.hpoint = 0,
.timer_sel = LEDC_TIMER_0
};
ledc_channel_config(&ledc_channel_io);
ledc_fade_func_install(0);
RMT我是通过api来配置的:
rmt_set_source_clk(rmt_tx.channel,SOC_MOD_CLK_XTAL); //设置rmt的时钟源为XTAL,40kMz
希望能够得到解答!
ESP32C3 自动light sleep模式下RMT,LEDC, ADC配置问题
Re: ESP32C3 自动light sleep模式下RMT,LEDC, ADC配置问题
我在ESP-IDF编程指南release/v5.2 API 参考 » 外设 API » 红外遥控 (RMT)找到了这段话
电源管理
通过 CONFIG_PM_ENABLE 选项启用电源管理时,系统会在进入 Light-sleep 模式前调整 APB 频率。该操作可能改变 RMT 内部计数器的分辨率。
然而,驱动程序可以通过获取 ESP_PM_APB_FREQ_MAX 类型的电源管理锁,防止系统改变 APB 频率。每当驱动创建以 RMT_CLK_SRC_APB 作为时钟源的 RMT 通道时,都会在通过 rmt_enable() 启用通道后获取电源管理锁。反之,调用 rmt_disable() 时,驱动程序释放锁。这也意味着 rmt_enable() 和 rmt_disable() 应成对出现。
如果将通道时钟源设置为其他选项,如 RMT_CLK_SRC_XTAL,则驱动程序不会为其安装电源管理锁。对于低功耗应用程序来说,只要时钟源仍然可以提供足够的分辨率,不安装电源管理锁更为合适。
电源管理
通过 CONFIG_PM_ENABLE 选项启用电源管理时,系统会在进入 Light-sleep 模式前调整 APB 频率。该操作可能改变 RMT 内部计数器的分辨率。
然而,驱动程序可以通过获取 ESP_PM_APB_FREQ_MAX 类型的电源管理锁,防止系统改变 APB 频率。每当驱动创建以 RMT_CLK_SRC_APB 作为时钟源的 RMT 通道时,都会在通过 rmt_enable() 启用通道后获取电源管理锁。反之,调用 rmt_disable() 时,驱动程序释放锁。这也意味着 rmt_enable() 和 rmt_disable() 应成对出现。
如果将通道时钟源设置为其他选项,如 RMT_CLK_SRC_XTAL,则驱动程序不会为其安装电源管理锁。对于低功耗应用程序来说,只要时钟源仍然可以提供足够的分辨率,不安装电源管理锁更为合适。
Re: ESP32C3 自动light sleep模式下RMT,LEDC, ADC配置问题
如果采用espidf4.4版本的api,
rmt_set_source_clk(rmt_tx.channel,SOC_MOD_CLK_XTAL); //设置rmt的时钟源为XTAL,40kMz
这个我实际使用了设置没有效果。使用的是rmt_get_source_clk()来读取。
可以通过 esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP,,,,);的方式,在使用外设时退出睡眠模式来实现。
或者使用5.1版本新的RMTapi在配置时选择时钟源。
LEDC也会收到动态调频的影响,也可以通过电源管理锁的方式实现。
ADC在自动light sleep下能够正常运行。
rmt_set_source_clk(rmt_tx.channel,SOC_MOD_CLK_XTAL); //设置rmt的时钟源为XTAL,40kMz
这个我实际使用了设置没有效果。使用的是rmt_get_source_clk()来读取。
可以通过 esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP,,,,);的方式,在使用外设时退出睡眠模式来实现。
或者使用5.1版本新的RMTapi在配置时选择时钟源。
LEDC也会收到动态调频的影响,也可以通过电源管理锁的方式实现。
ADC在自动light sleep下能够正常运行。
Who is online
Users browsing this forum: No registered users and 47 guests