STM32 i czujnik koloru TCS3200

Poniżej przedstawiono fragment programu głównego stworzonej aplikacji.

Na początku programu przeprowadzana jest konfiguracja zegarów, przerwań oraz linii GPIO. W kolejnym kroku przeprowadzane jest ustawienie poszczególnych linii, realizowane jest to przy wykorzystaniu definicji bardziej złożonych operacji, definicje operacji znajdują się w pliku defines.h projektu. Dla przykładu definicja polecenia TCS3200_DISABLE przedstawia się następująco:

GPIO_TCS3200->BSRR = GPIO_BSRR_BS(TCS3200_PIN_nOE)

Funkcja GPIO_BSRR_BS także jest definicją, która w połączeniu z parametrem generuje nazwę bitu rejestru BSRR. Tak duża liczba definicji zwiększa czytelność kodu oraz powoduje, że w prowadzenie zmian (np. odnośnie połączenia linii) sprowadza się do zmiany paru wartości w jednym miejscu całego projektu. W zależności od warunków można zmienić ustawienia zakresu częstotliwości oraz ustawić we własnym zakresie czy diody LED mają być zapalone, czy zgaszone.

W następnym kroku przeprowadzana jest inicjalizacja licznika, przeprowadzana jest ona w klasyczny sposób. Jak wiadomo w programie będzie realizowany pomiar częstotliwości poprzez zliczanie impulsów. W przypadku mikrokontrolerów z rodziny STM32 mamy możliwość skonfigurowania licznika tak aby sygnał podawany był z zewnątrz. Właśnie za to odpowiada polecenie:

TIM_TIxExternalClockConfig(TIM2, TIM_TIxExternalCLK1Source_TI1, TIM_ICPolarity_Rising, 0x0);

Powyższe polecenie powoduje, że sygnałem zegarowym licznika TIM2 staje się sygnał podawany na linię kanału pierwszego licznika TIM2 (w tym przypadku jest to pin PA0), natomiast zliczanie odbywa się na zboczu narastającym. Następnie włączany jest licznik TIM2.

W kolejnym kroku mamy pobranie częstotliwości poszczególnych linii zegarowych i zapisanie ich to struktury RCC_Clocks. W wyniku tego działania w następnym kroku konfigurowane jest przerwanie SysTick w taki sposób aby występowało 100 w ciągu sekundy, uzyskano to poprzez podzielenie częstotliwości sygnału, jakim taktowany jest licznik SysTcik, przez 100. Podczas obsługi przerwania realizowany jest odczyt licznika, występowanie przerwania z taką częstotliwością sprawia, iż odczytany wynik jest wielokrotnością 102Hz.

Do pobrania

O autorze