Generatory PWM – obsługa programowa
W przypadku opisu kanału wartość TIM_OCMode zmienia się z wartości TIM_OCMode_Toggle (dla sygnału zegarowego) na wartość TIM_OCMode_PWM1. Wartość TIM_Pulse, opisująca wypełnienie sygnału PWM, odczytywana jest z tablicy.
Projekt umożliwia konfigurowanie parametrów sygnału zegarowego i sygnału PWM, jest to realizowane poprzez następujące operacje:
//przerwanie wywolane przez joystick w pozycji - up
else if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
if(b == 1)
{
//ustawienie aktualnej konfiguracji
a += 1;
if(a > 11){a = 11;}
//aktualizacja wartosci rejestru CCR4 licznika TIM1
TIM1->CCR4 = 1000 - c[a];
}
else if(b == 2)
{
//ustawienie aktualnej konfiguracji
a -= 1;
if(a < 1){a = 1;}
//aktualizacja wartosci rejestru ARR licznika TIM1
TIM1->ARR = a * 34;
//wyzerowanie wartosci rejestru CNT licznika TIM1
TIM1->CNT = 0;
}
//wyczyszczenie flagi przerwania
EXTI_ClearITPendingBit(EXTI_Line9);
}
oraz
//przerwanie wywolane przez joystick w pozycji - down
if(EXTI_GetITStatus(EXTI_Line10) != RESET)
{
if(b == 1)
{
//ustawienie aktualnej konfiguracji
a -= 1;
if(a < 0){a = 0;}
//aktualizacja wartosci rejestru CCR4 licznika TIM1
TIM1->CCR4 = 1000 - c[a];
}
else if(b == 2)
{
//ustawienie aktualnej konfiguracji
a += 1;
if(a > 16){a = 16;}
//aktualizacja wartosci rejestru ARR licznika TIM1
TIM1->ARR = a * 34;
//wyzerowanie wartosci rejestru CNT licznika TIM1
TIM1->CNT = 0;
}
//wyczyszczenie flagi przerwania
EXTI_ClearITPendingBit(EXTI_Line10);
}
Aktualizacja parametrów odbywa się bezpośrednio do rejestrów w przypadku sygnału PWM jest to aktualizacja rejestru CCR4 licznika TIM1, natomiast dla sygnału zegarowego aktualizowany jest rejestr ARR licznika oraz zerowanie rejestru CNT, zerowanie jest realizowane w celu uniknięcia sytuaji gdy rejestr CNT będzie posiadał większą wartość od ARR.
W przypadku wciśniecia joysticka (pozycja OK) następuje wyłączenie licznika, jest ono realizowane następująco:
//przerwanie wywolane przez joystick w pozycji - ok
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
//ustawienie trybu dzialania
b = 0;
//wyłaczenie timera TIM1
TIM_Cmd(TIM1, DISABLE);
//wyłaczenie pinów wyjściowych timera
TIM_CtrlPWMOutputs(TIM1, DISABLE);
//wyczyszczenie flagi przerwania
EXTI_ClearITPendingBit(EXTI_Line8);
}
Funkcje obsługi przerwań odwołują się do zmiennych zadeklarowanych w pliku main.c, aby umożliwić odwoływania się do tych zmiennych w funkcji obsługi przerwania należy przeprowadzić ich inicjalizacje jest to realizowane poprzez:
//zdefiniowanie zmiennej zadeklarowanej w pliku main.c extern int a; extern int b; extern int c[];
Mariusz Dziębowski
m.dziebowski@interia.pl

Czy kamery termowizyjne pokazują nam całą prawdę?
Generowanie ujemnego napięcia odniesienia – eksperymenty z zestawem ADALM2000
Automatyka ATS i SZR – dlaczego nowoczesny zakład produkcyjny nie może polegać wyłącznie na zasilaniu z sieci? 

![https://www.youtube.com/watch?v=XkeyLmtLfxo O konkursie organizowanym przez firmę TRUMPF Huettinger i polskie uczelnie techniczne opowiada Alicja Peresada i prof. Jacek Rąbkowski oraz kilkoro nagrodzonych dyplomantów: mgr inż. Jakub Dobosz, inż. Maja Zielińska, dr inż. Jakub Kołodziej, dr inż Weronika Hryniewska-Guzik i dr inż. Grzegorz Bartyzel. Zapraszamy do obejrzenia filmu! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/07/TRUMPF-czolowka.png)

![https://www.youtube.com/watch?v=gHcP8AajoN4 Szymon Robak oprowadza po katowickim Laboratorium Badań Kompatybilności Elektromagnetycznej w Sieć Badawcza Łukasiewicz - Instytucie Sztucznej Inteligencji i Cyberbezpieczeństwa. Zapraszamy na film! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/06/Szymon-Robak-tytulowe.png)

