Загрузка данных



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");
}