Периферийное устройство ESP32 LEDC PWM должно быть отключено после использования, но остается подключенным - PullRequest
0 голосов
/ 16 сентября 2018

Я управляю многими светодиодами, используя ESP32 и только одно ШИМ (LEDC) периферийное устройство.Мне нужен только один светодиод за один раз, другие светодиоды должны быть выключены.

Я правильно управляю диммированием светодиодов и режимом ШИМ.После того, как я закончу с этим светодиодом, я должен переключиться на другой светодиод.Когда я перенастроил вывод GPIO канала LEDC, а затем снова вызвал ledc_channel_config (), ШИМ правильно отображается на новом выводе, что я и хотел.

ПРОБЛЕМА: Проблема в том, что он также продолжает выводить ШИМна предыдущем пин-коде, что нежелательно.Как отсоединить периферийное устройство ШИМ от предыдущего контакта?Я попробовал много вещей без успеха, например, вызвал 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 и режим работы, и вывод правильно выводит ШИМ на нужный вывод:

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));

Пока все хорошо.Теперь я хочу остановиться на этом светодиоде (не просто сделать дежурство = 0, я имею в виду больше не подключаться к периферийному устройству ШИМ).Я называю конфигурацию канала другим значением пина.Он будет правильно выводить на новый вывод, но не прекратит вывод на старый вывод:

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));

Я вполне уверен, что понимаю, что периферийное устройство ШИМ остается подключенным к обоим выводам.Как отключить его с помощью ESP32 API?

...