Библиотека 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.