Библиотека PWM с низким энергопотреблением: PWM не останавливается, если low_power_pwm_stop вызывается из обработчика. Это ошибка?

Я использую SDK 12.0.0.

Я работаю с low_power_pwm_init() инициализировать ШИМ, и я передал обработчик при инициализации. Я хочу остановить ШИМ из обработчика, поэтому я звоню low_power_pwm_stop() из обработчика. Я наблюдаю, что ШИМ не останавливается.

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

if (p_pwm_instance->pwm_state == NRF_DRV_STATE_INITIALIZED)
{
    p_pwm_instance->pwm_state = NRF_DRV_STATE_POWERED_ON;
    err_code = app_timer_start(*p_pwm_instance->p_timer_id, p_pwm_instance->timeout_ticks, p_pwm_instance);
    APP_ERROR_CHECK(err_code);
}

В low_power_pwm_stop(), p_pwm_instance->pwm_state назначен NRF_DRV_STATE_INITIALIZED и в приведенном выше фрагменте таймер запускается, если состояние драйвера NRF_DRV_STATE_INITIALIZED, снова вызывая включение ШИМ.

Это ошибка?

1 ответ

Решение

Я разместил этот вопрос на девоновой зоне nordic, и ниже приведен ответ, который я получил от nordic сотрудника.

Привет,

Я вижу, что это будет так, и сообщу об этом внутренне.

Вы можете установить флаг в обработчике событий и вызвать процедуру остановки в main.

Ole

Так что я предполагаю, что это ошибка в SDK-коде nordic.

Другие вопросы по тегам