我正在使用SDK12.0.0。
我正在与low_power_pwm_init()合作初始化脉宽调制,并且在初始化过程中通过了一个处理程序。我想从处理程序停止脉宽调制,因此我从处理程序中调用low_power_pwm_stop()。我观察到pwm并没有停止。
我试图调查造成这种情况的原因,发现pwm_timeout_handler() in low_power_pwm.c正在重新启动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,则会启动计时器,从而使NRF_DRV_STATE_INITIALIZED再次打开。
这是个虫子吗?
发布于 2017-02-27 07:54:56
我在北欧的devzone上发布了这个问题,下面是我从一位北欧员工那里得到的回答。
嗨, 我可以看到情况会是这样,并会在内部报告。 您可以在事件处理程序中设置一个标志,并在main中调用停止例程。 Ole
所以我想这是北欧sdk代码中的一个bug。
https://stackoverflow.com/questions/42393960
复制相似问题