int czestotliwosc;
int wypelnienie;
printf("Podaj czestotliwosc [Hz]: ");
if (scanf("%d", &czestotliwosc) != 1)
{
break;
}
printf("Podaj wypelnienie [%%]: ");
if (scanf("%d", &wypelnienie) != 1)
{
break;
}
if (czestotliwosc > 0 &&
czestotliwosc <= 1000000 &&
wypelnienie >= 0 &&
wypelnienie <= 100)
{
uint32_t zegar = 16000000UL; // Przyklad: TIM2 = 16 MHz
uint32_t psc = 15;
uint32_t liczba = zegar / (psc + 1) / czestotliwosc;
if (liczba >= 2 && liczba <= 65535)
{
uint32_t arr = liczba - 1;
uint32_t ccr = (liczba * (uint32_t)wypelnienie) / 100;
__HAL_TIM_SET_PRESCALER(&htim2, psc);
__HAL_TIM_SET_AUTORELOAD(&htim2, arr);
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, ccr);
// Wczytaj nowe ustawienia licznika
__HAL_TIM_SET_COUNTER(&htim2, 0);
__HAL_TIM_GENERATE_EVENT(&htim2, TIM_EVENTSOURCE_UPDATE);
printf("PWM: %d Hz, %d %%\n",
czestotliwosc, wypelnienie);
}
else
{
printf("Czestotliwosc poza zakresem\n");
}
}
else
{
printf("Nieprawidlowe dane\n");
}