44 if (period == _period)
return;
45 bool needupdate = _period == 0;
47 hTim.Instance->CR1 |= TIM_CR1_UDIS;
48 hTim.Instance->ARR = _period;
50 hTim.Instance->CR1 &= ~TIM_CR1_UDIS;
51 if (needupdate || hTim.Instance->CNT >= _period)
52 hTim.Instance->EGR |= TIM_EGR_UG;
70 : hTim(conf.tim->handle), chan(conf.chan), _period(hTim.Init.Period) {
72 while (HAL_TIM_PWM_Init(&hTim) != HAL_OK);
75 TIM_OC_InitTypeDef sConfigOC = {};
76 sConfigOC.OCMode = TIM_OCMODE_PWM1;
78 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
79 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
80 while (HAL_TIM_PWM_ConfigChannel(&hTim, &sConfigOC, chan) != HAL_OK);
82 __HAL_TIM_SET_COMPARE(&hTim, chan, 0);
83 while (HAL_TIM_PWM_Start(&hTim, chan) != HAL_OK);