完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用IDF里的”ledc_basic” example code,并加入了esp_light_sleep_start()进入light sleep。我有参考一些相关问题的帖子,在进入前有设置了ledc timer clock为LEDC_USE_RC_FAST_CLK;及RC_FAST在sleep mode电源打开;并将ledc的gpio 禁止sleep模式。这样的设定,仍无法在light sleep模式下持续产生LEDC讯号。想请问大家是否能提供一些建议? 謝謝。
IDF version: (master)5.4.0 Development board: ESP32-C6-DevKitM-1 Development Platform: Windows, VS Code 底下是我目前使用的程序:Code: Select all #include #include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "driver/ledc.h"#include "esp_err.h"#include "esp_sleep.h"#define LEDC_TIMER LEDC_TIMER_0#define LEDC_MODE LEDC_LOW_SPEED_MODE#define LEDC_OUTPUT_IO (7) // Define the output GPIO#define LEDC_CHANNEL LEDC_CHANNEL_0#define LEDC_DUTY_RES LEDC_TIMER_10_BIT #define LEDC_DUTY (16) #define LEDC_FREQUENCY (4000) static void example_ledc_init(void){ // Prepare and then apply the LEDC PWM timer configuration ledc_timer_config_t ledc_timer = { .speed_mode = LEDC_MODE, .duty_resolution = LEDC_DUTY_RES, .timer_num = LEDC_TIMER, .freq_hz = LEDC_FREQUENCY, .clk_cfg = LEDC_USE_RC_FAST_CLK }; ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer)); // Prepare and then apply the LEDC PWM channel configuration ledc_channel_config_t ledc_channel = { .speed_mode = LEDC_MODE, .channel = LEDC_CHANNEL, .timer_sel = LEDC_TIMER, .intr_type = LEDC_INTR_DISABLE, .gpio_num = LEDC_OUTPUT_IO, .duty = 0, .hpoint = 0 }; ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));}static void ledc_task(void *args){ // Set the LEDC peripheral configuration example_ledc_init(); ESP_ERROR_CHECK(ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, LEDC_DUTY)); ESP_ERROR_CHECK(ledc_update_duty(LEDC_MODE, LEDC_CHANNEL)); esp_sleep_pd_config(ESP_PD_DOMAIN_RC_FAST, ESP_PD_OPTION_ON); gpio_sleep_sel_dis(LEDC_OUTPUT_IO); while(1) { printf("Entering light sleepn"); /* Enter sleep mode */ esp_light_sleep_start(); vTaskDelay(100/portTICK_PERIOD_MS); }}void app_main(void){ xTaskCreate(ledc_task, "ledc_task", 4096, NULL, 6, NULL);} |
|
相关推荐
1个回答
|
|
根据您提供的信息,您正在使用ESP32-C6开发板和ESP-IDF v5.4.0,并尝试在light sleep模式下持续产生LEDC PWM信号。您已经尝试了一些解决方案,但仍然无法实现。
在这种情况下,我建议您尝试以下步骤: 1. 确保您的ESP-IDF版本是最新的,因为新版本可能修复了一些已知的问题。您可以使用以下命令来更新ESP-IDF: ``` git pull git submodule update --init --recursive ``` 2. 在进入light sleep模式之前,确保您已经正确地配置了LEDC。以下是一些建议的配置: ```c ledc_timer_config_t ledc_timer = { .duty_resolution = LEDC_TIMER_13_BIT, // 设置分辨率为13位 .freq_hz = 5000, // 设置频率为5000Hz .clk_cfg = LEDC_USE_RC_FAST_CLK, // 使用内部快速RC振荡器作为时钟源 .speed_mode = LEDC_HIGH_SPEED_MODE, // 使用高速模式 .timer_num = LEDC_TIMER_0 // 使用定时器0 }; ledc_timer_config(&ledc_timer); ``` 3. 在进入light sleep模式之前,确保您已经正确地配置了LEDC通道。以下是一些建议的配置: ```c ledc_channel_config_t ledc_channel = { .gpio_num = 4, // 设置GPIO 4为PWM输出 .speed_mode = LEDC_HIGH_SPEED_MODE, // 使用高速模式 .channel = LEDC_CHANNEL_0, // 使用通道0 .intr_type = LEDC_INTR_DISABLE, // 关闭中断 .timer_sel = LEDC_TIMER_0 // 使用定时器0 }; ledc_channel_config(&ledc_channel); ``` 4. 在进入light sleep模式之前,确保您已经正确地设置了LEDC的占空比: ```c ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 50); // 设置占空比为50% ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0); // 更新占空比 ``` 5. 在进入light sleep模式之前,确保您已经正确地启用了LEDC: ```c ledc_fade_func_install(); ``` 6. 在进入light sleep模式时,确保您已经正确地设置了唤醒源。以下是一些建议的设置: ```c esp_light_sleep_start(); ``` 7. 如果以上步骤仍然无法解决问题,您可以尝试在ESP-IDF的GitHub仓库中查找类似的问题或报告新的issue,以便获得更多帮助。 希望这些建议能帮助您解决问题。如果您有其他问题,请随时提问。 |
|
|
|
只有小组成员才能发言,加入小组>>
142 浏览 1 评论
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
438浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 16:10 , Processed in 0.950944 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号