Fix issue with changing frequency

This commit is contained in:
Hierophect 2019-10-27 19:41:01 -04:00
parent 0cd8c3d5a8
commit 7fd5e9b867

View File

@ -293,16 +293,16 @@ void common_hal_pulseio_pwmout_set_frequency(pulseio_pwmout_obj_t* self, uint32_
//shut down //shut down
HAL_TIM_PWM_Stop(&self->handle, self->channel); HAL_TIM_PWM_Stop(&self->handle, self->channel);
tim_clock_disable(1<<(self->tim->tim_index-1));
//Only change altered values //Only change altered values
self->handle.Init.Period = period - 1; self->handle.Init.Period = period - 1;
self->handle.Init.Prescaler = (source_freq / PWM_MAX_FREQ) - 1; // TIM runs at ~6MHz self->handle.Init.Prescaler = (source_freq / PWM_MAX_FREQ) - 1; // TIM runs at ~6MHz
//restart everything //restart everything, adjusting for new speed
if(HAL_TIM_PWM_Init(&self->handle) != HAL_OK) { if(HAL_TIM_PWM_Init(&self->handle) != HAL_OK) {
mp_raise_ValueError(translate("Timer Re-Init Error")); mp_raise_ValueError(translate("Timer Re-Init Error"));
} }
self->chan_handle.Pulse = (period*self->duty_cycle)/100 - 1;
if(HAL_TIM_PWM_ConfigChannel(&self->handle, &self->chan_handle, self->channel) != HAL_OK) { if(HAL_TIM_PWM_ConfigChannel(&self->handle, &self->chan_handle, self->channel) != HAL_OK) {
mp_raise_ValueError(translate("Channel Re-Init Error")); mp_raise_ValueError(translate("Channel Re-Init Error"));
} }