完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
开发环境:
开发板: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 |
|
相关推荐
1个回答
|
|
在ESP32-C3中,使用自动light sleep模式时,确实需要特别注意RMT、LEDC和ADC等外设的配置。以下是一些建议和解决方案,希望对您有所帮助:
1. **RMT时钟源选择**: - 在自动light sleep模式下,可以选择RMT的时钟源为RC_FAST_CLK或XTAL_CLK。为了确保RMT在light sleep模式下正常工作,建议在初始化RMT之前,先设置RMT时钟源。 ```c rmt_config_t rmt_config = RMT_DEFAULT_CONFIG_TX(RMT_CHANNEL_0, RMT_MODE_MEM); rmt_config.clk_src = RMT_BASECLK_DEFAULT; rmt_config.resolution_hz = 1000000; rmt_config.mem_block_num = 1; rmt_config.tx_config.carrier_freq_hz = 36000; rmt_config.tx_config.carrier_level = RMT_CARRIER_LEVEL_HIGH; rmt_config.tx_config.carrier_duty_cycle = RMT_CARRIER_DUTY_CYCLE_EVEN; rmt_config.tx_config.idle_output_en = true; rmt_config.tx_config.idle_output_level = RMT_IDLE_LEVEL_LOW; rmt_config.flags = RMT_CHANNEL_FLAGS_DEFAULT; rmt_config.clk_src = RMT_BASECLK_RC_FAST; ``` 2. **LEDC时钟源选择**: - 在自动light sleep模式下,LEDC的时钟源可以选择LEDC_USE_RC_FAST_CLK或LEDC_USE_XTAL_CLK。为了避免复位问题,建议在初始化LEDC之前,先设置LEDC时钟源。 ```c ledc_timer_config_t ledc_timer = { .duty_resolution = LEDC_TIMER_10_BIT, .freq_hz = 5000, .clk_cfg = LEDC_USE_RC_FAST_CLK, .speed_mode = LEDC_HIGH_SPEED_MODE, .timer_num = LEDC_TIMER_0, }; ledc_timer_config(&ledc_timer); ``` 3. **手动配置唤醒源**: - 在自动light sleep模式下,确实需要手动配置唤醒源。您可以根据需要选择GPIO、RMT、LEDC等作为唤醒源。 ```c // 配置GPIO唤醒源 gpio_config_t io_conf = { .pin_bit_mask = (1ULL< .pull_up_en = 1, .pull_down_en = 0, .intr_type = GPIO_INTR_NEGEDGE }; gpio_config(&io_conf); gpio_wakeup_enable(GPIO_NUM_0, GPIO_INTR_NEGEDGE); // 配置RMT唤醒源 rmt_sleep_mode_t rmt_sleep_mode = { .rmt_clk_src = RMT_BASECLK_DEFAULT, .rmt_sleep_mode = RMT_SLEEP_MODE_WAKEUP, .rmt_sleep_duration = 0 }; rmt_sleep_mode_set(&rmt_sleep_mode); // 配置LEDC唤醒源 ledc_sleep_mode_t ledc_sleep_mode = { .ledc_clk_src = LEDC_USE_RC_FAST_CLK, .ledc_sleep_mode = LEDC_SLEEP_MODE_WAKEUP, .ledc_sleep_duration = 0 }; ledc_sleep_mode_set(&ledc_sleep_mode); ``` 4. **手动进入light sleep**: - 在自动light sleep模式下,您可以选择手动进入light sleep,以确保系统在需要时进入低功耗状态。 ```c // 进入light sleep asm("waiti 0"); ``` 5. **调试和优化**: - 在开发过程中,建议使用ESP-IDF的调试工具来监控系统状态,以便及时发现和解决问题。同时,根据实际需求对系统进行优化,以实现最佳的功耗性能。 总之,在使用ESP32-C3的自动light sleep模式时,需要特别注意RMT、LEDC和ADC等外设的配置。通过合理选择时钟源、手动配置唤醒源和手动进入light sleep,可以确保系统在低功耗状态下正常工作。希望这些建议对您有所帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
429浏览 6评论
362浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
343浏览 5评论
349浏览 4评论
327浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-1 07:14 , Processed in 0.800056 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191