STM32VLDISCOVERY: obsługa modułu GPS Fastrax IT500
Oprogramowanie
Oprogramowanie dla mikrokontrolera STM32 zostało napisane przy wykorzystaniu środowiska programistycznego Keil µVision oraz bibliotek STM32F10x StdPeriph Lib w wersji 3.5.0. Na rysunku 5 przedstawiono schemat blokowy programu.
Rys. 5. Schemat blokowy programu
Po uruchomieniu programu w pierwszej kolejności mikrokontroler STM32 konfiguruje wyprowadzenie PA10. Następnie konfigurowany jest interfejs komunikacyjny UART. Parametry pracy są zgodne z parametrami ustawionymi w module GPS:
- Baudrate 9600,
- 8 bitów danych,
- 1 bit stopu,
- Brak parzystości.
Dzięki temu wyprowadzenie PA10 może służyć do odbioru danych z modułu GPS. Następnie mikrokontroler oczekuje na odebranie tychże danych (są one kodowane zgodnie z protokołem NMEA0183). Bajt po odebraniu wpisywany jest do tablicy temp[] w miejsce o indeksie 0. Jeśli zawarta w nim informacja zostanie zinterpretowana jako znak inny niż ‘$’, następnych pięć odebranych bajtów wpisywanych jest pod kolejne indeksy tablicy temp[]. Znaki te symbolizują identyfikator zdania. Jeśli identyfikator nosi nazwę GPGLL, oznacza to, że dane, które po nim wyśle moduł GPS zawierają informację o czasie i pozycji GPS. W tej sytuacji kolejne bajty są wczytywane do tablic o nazwach time[], n[] oraz e[]. W tablicach tych znajdują się odpowiednio: aktualny czas, szerokość geograficzna i długość geograficzna.
Warto przyjrzeć się bliżej wybranym funkcjom programu. Część kodu została opisana w książce [1] i nie będzie powtórnie opisywana w tym opracowaniu.
W listingu 1 przedstawiono ciało funkcji getch(), która odpowiada za sczytywanie poszczególnych znaków do zmiennej. Docelowo funkcja wczytuje wartości do poszczególnych tablic. Dodatkowo funkcja zamienia każdy znak ‘,’ na znak ‘|’.
Listing 1.
char getch(void) { while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) { } tmp = USART_ReceiveData(USART1); if(tmp == ’,’) { tmp = ’|’; } else return tmp; }
W listingu 2 pokazano kod będący „sercem” całego programu. Odpowiada on za odczytywanie danych z modułu GPS i ich interpretację.
Listing 2.
while(1) { while((temp[0]=getch()) != ’$’); for(i=0; i