52 else if (value > 1.0f)
58 static_cast<uint32_t
>(
static_cast<float>(htim_->Init.Period + 1) * value);
69 htim_->Instance->CCR1 = pulse;
72 htim_->Instance->CCR2 = pulse;
75 htim_->Instance->CCR3 = pulse;
77#if defined(TIM_CHANNEL_5) && defined(TIM_CHANNEL_6)
79 htim_->Instance->CCR4 = pulse;
82 htim_->Instance->CCR5 = pulse;
85 htim_->Instance->CCR6 = pulse;
89 htim_->Instance->CCR4 = pulse;
99 uint32_t clock_freq = 0;
101#if defined(STM32F0) || defined(STM32G0)
103 clock_freq = HAL_RCC_GetHCLKFreq();
105 uint32_t& target_freq = config.
frequency;
106 if (target_freq == 0)
112 htim_->Instance == TIM1 ||
115 htim_->Instance == TIM8 ||
118 htim_->Instance == TIM9 ||
121 htim_->Instance == TIM10 ||
124 htim_->Instance == TIM11 ||
127 htim_->Instance == TIM15 ||
130 htim_->Instance == TIM16 ||
133 htim_->Instance == TIM17 ||
136 htim_->Instance == TIM20 ||
140 clock_freq = HAL_RCC_GetPCLK2Freq();
142 clock_freq = GetH5TimerClock(clock_freq,
143 (RCC->CFGR2 & RCC_CFGR2_PPRE2) >> RCC_CFGR2_PPRE2_Pos);
144#elif defined(STM32H7)
145 clock_freq = GetH7TimerClock(clock_freq);
146#elif defined(RCC_CFGR_PPRE2)
147 if ((RCC->CFGR & RCC_CFGR_PPRE2) != RCC_CFGR_PPRE2_DIV1)
155 htim_->Instance == TIM2 ||
158 htim_->Instance == TIM3 ||
161 htim_->Instance == TIM4 ||
164 htim_->Instance == TIM5 ||
167 htim_->Instance == TIM6 ||
170 htim_->Instance == TIM7 ||
173 htim_->Instance == TIM12 ||
176 htim_->Instance == TIM13 ||
179 htim_->Instance == TIM14 ||
183 clock_freq = HAL_RCC_GetPCLK1Freq();
185 clock_freq = GetH5TimerClock(clock_freq,
186 (RCC->CFGR2 & RCC_CFGR2_PPRE1) >> RCC_CFGR2_PPRE1_Pos);
187#elif defined(STM32H7)
188 clock_freq = GetH7TimerClock(clock_freq);
189#elif defined(RCC_CFGR_PPRE1)
190 if ((RCC->CFGR & RCC_CFGR_PPRE1) != RCC_CFGR_PPRE1_DIV1)
209 uint32_t prescaler = 1;
212 for (prescaler = 1; prescaler <= 0xFFFF; ++prescaler)
214 uint32_t temp_period = clock_freq / (prescaler * config.
frequency);
215 if (temp_period <= 0x10000)
217 period = temp_period;
223 if (!found || period == 0)
228 htim_->Init.Prescaler = prescaler - 1;
229 htim_->Init.Period = period - 1;
231 if (HAL_TIM_PWM_Init(htim_) != HAL_OK)