ESP32 LEDC PWM外设在使用后需要断开,但保持连接状态

时间:2018-09-16 08:20:16

标签: pwm esp32

我使用ESP32和一个PWM(LEDC)外围设备控制许多LED。我只需要一次使一个LED变暗,其他LED必须熄灭。

我正确控制了LED调光和PWM占空比。用完该LED后,我必须切换到另一个LED。当我重新配置LEDC通道GPIO引脚,然后再次调用ledc_channel_config()时,PWM会正确显示在新引脚上,这正是我想要的。

问题: 问题在于它还会继续在前一个引脚上输出PWM,这是不希望的。如何断开PWM外设与先前引脚的连接?我尝试了很多没有成功的事情,例如调用ledc_stop()。我还阅读了有关IOMUX的信息。

我的代码: 我将渠道结构设为全局:

ledc_channel_config_t ledc_channel_fade_A = {0};

重置后,我将使用程序中不变的值(GPIO引脚和占空比除外)来初始化结构

void pwm_init_fade_channels(void)
{
    ledc_channel_fade_A.gpio_num = LED_PWR_A;               // selecting physical GPIO pin, this will be changing for each insert
    ledc_channel_fade_A.speed_mode = LEDC_HIGH_SPEED_MODE;  // currently this is the only choice
    ledc_channel_fade_A.channel = PWM_FADE_CHANNEL_A;       // one of LEDC_CHANNEL_0 ... LEDC_CHANNEL_7
    ledc_channel_fade_A.intr_type = LEDC_INTR_DISABLE;
    ledc_channel_fade_A.timer_sel = PWM_TIMER_FADES;        // one of LEDC_TIMER0 ... LEDC_TIMER_3
    ledc_channel_fade_A.duty = 0; // Value of the timer (!) after which the signal will drop low (for 10-bit timer 0...1023).
}

然后我开始使用它。我只需更改GPIO引脚号和占空比,然后在所需的引脚上正确输出PWM:

ledc_channel_fade_A.gpio_num = gpio_pin_no;     // selecting physical GPIO pin, changing for each insert
ledc_channel_fade_A.duty = duty; // Value of the timer (!) after which the signal will drop low (for 10-bit timer 0...1023).
ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel_fade_A));

到目前为止,一切都很好。现在我要停止使用该LED(不仅仅是使占空比= 0,我的意思是不再与PWM外设连接)。我用另一个引脚值调用通道配置。它将在新引脚上正确输出,但不会停止在旧引脚上输出:

ledc_channel_fade_A.gpio_num = NEW_gpio_pin_no;     // selecting physical GPIO pin, changing for each insert
ledc_channel_fade_A.duty = NEW_duty; // Value of the timer (!) after which the signal will drop low (for 10-bit timer 0...1023).
ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel_fade_A));

我相当确定我知道PWM外设保持连接到两个引脚。如何使用ESP32 API断开连接?

0 个答案:

没有答案