Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Odbiór danych przez UART z Neo-7 (GPS MODULE)

donWAZONesko 13 Wrz 2018 08:04 192 5
  • #1 13 Wrz 2018 08:04
    donWAZONesko
    Poziom 6  

    Witam!
    Od jakiegoś czasu pracuję na stm32 - ucząc się o protokołach I2C współgrając z modułami magnetometru i ciśnieniomierza. Chciałbym dołączyć do tego moduł GPS jednak obsłużyć go przy pomocy UART'a. Sensor to NEO-7, wraz z podłączeniem zasilania GPS wysyła dane *żyje swoim życie*. Próbuję zrealizować to w następujący sposób i niestety nie wiem gdzie może być problem. Chciałbym zebrać informacje i przekazać je dalej.

    1.Tworzę tablicę zmiennych do przechowywania danych

    Kod: c
    Zaloguj się, aby zobaczyć kod


    2. Inicjalizuje wszystko potrzebne funkcję(nie jestem pewny czy timer jest potrzebny. Czy nie mogę odebrać danych *praca synchroniczna* i przy przerwaniu przekazać dane przy pomocy TRANSMIT?)
    Kod: c
    Zaloguj się, aby zobaczyć kod


    3.Gdy dane są odebrane - wykonuję się przerwanie
    Kod: c
    Zaloguj się, aby zobaczyć kod


    4. Inicjalizuję wszystkie peryferia
    Kod: c
    Zaloguj się, aby zobaczyć kod


    5. Aktualizuję parametry
    Kod: c
    Zaloguj się, aby zobaczyć kod



    Niezbyt mogę wyłapać problem z logiką. Tworzę zmienną, przychodzą dane od GPS, wykonuję się przerwanie, w którym odbieram dane i przekazuje je dalej, wychodzę z przerwania i sytuacja powtarza się na nowo. Prosiłbym o pomoc.

    Pozdrawiam,
    Michał

    0 5
  • #2 13 Wrz 2018 11:46
    Typek2
    Poziom 11  

    Z Twojej wypowiedzi wynika że wszystko jest tak jak trzeba tylko masz problem z logiką... Napisz w jednym zdaniu co nie działa.

    0
  • #3 13 Wrz 2018 17:23
    mrh
    Poziom 18  

    Moduł GPS wysyła sam co 1 sekundę paczkę danych. Ty musisz je tylko odebrać.
    Paczka danych wygląda tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    0
  • #4 14 Wrz 2018 08:20
    BlueDraco
    Specjalista - Mikrokontrolery

    Dwa proste rozwiązania:
    1. Bufor wiersza 80..100 znaków, w przerwaniu UART automat kompletujący wiersz i po skompletowaniu parsowanie przez jakieś if i sscanf.
    2. Parser NMEA w przerwaniu UART jako automat.

    0
  • #5 15 Wrz 2018 10:59
    donWAZONesko
    Poziom 6  

    Wydaję mi się, że znalazłem problem projektu. Korzystając HAL_UART_RECEIVE odbieram danę, lecz niepotrzebnie próbuje je dalej transmitować HAL_UART_TRANSMIT. Zrozumiałem to w następujący sposób. Zmuszam urządzenie (moduł GPS) do wysyłania danych przy pomocy TRANSMIT, a następnie próbuje je odebrać. Wiedziałem o tym, że GPS nadaję cały czas ale i tak chciałem go zmusić do wysłania informacji. Nie potrzebnie "zmuszałem go do pracy" gdy on już pracował. Widzę w STM STUDIO, że wysyła dane na tablicę 283 elementową (długość wiadomości od GPS) - teraz zostaję tylko je w jakiś mądry sposób przerobić. Dziękuje za rady :)

    0
  • #6 15 Wrz 2018 11:36
    BlueDraco
    Specjalista - Mikrokontrolery

    Musisz niezależnie rozpoznawać poszczególne wiersze NMEA. Nie możesz polegać na długości danyci i ich postaci - to się zmienia.

    0