低功耗 PWM 库:如果从处理程序调用 low_power_pwm_stop,则 PWM 不会停止。这是一个错误吗?

Low-power PWM library: PWM doesnt stop if low_power_pwm_stop is called from handler. Is this a bug?

我正在使用 SDK 12.0.0。

我正在与 low_power_pwm_init() 一起初始化 pwm,我在初始化时传递了一个处理程序。我想从处理程序中停止 pwm,因此我从处理程序中调用 low_power_pwm_stop()。我观察到 pwm 没有停止。

我试图调查这个原因,发现 low_power_pwm.c 中的 pwm_timeout_handler() 正在重启 pwm。以下是可疑的片段。

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,则定时器启动,导致 pwm 开启再次.

这是一个错误吗?

我已经在 nordic 的 devzone 上发布了这个问题,下面是我从一名 nordic 员工那里得到的answer

Hi,

I can see that this will be the case and will report it internally.

You can set a flag in the event handler and call the stop routine in main.

Ole

所以我猜这是 nordic 的 sdk 代码中的一个错误。