Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

STM32 UART SIM800 - Komunikacja z SIM800 AT Commands Odbiór danych

wojlej 10 Sep 2014 23:33 3066 4
  • #1
    wojlej
    Level 17  
    Witam,

    Próbuje skomunikować się z modułem SIM800 przy pomocy STM32F100RBT6B. Mam skonfigurowane peryferia i wysyłam dane do modułu. Niestety problem pojawia się przy odbiorze, Odbieram tylko pierwszą literę i nie wiem dlaczego. Wykorzystuje przerwania do transmisji UART. Komunikacja z poziomu PC <-> SIM800 przebiega bez problemów, prosiłbym o zerknięcie na kod i pomoc w znalezieniu błędu odbioru danych:

    Funkcja main:
    Code: cpp
    Log in, to see the code


    Funkcja SIM800_Cmd:
    Code: cpp
    Log in, to see the code


    Funkcja przerwania:
    Code: cpp
    Log in, to see the code


    Prosiłbym o pomoc
  • #2
    _coder
    Level 12  
    zajdź w sieci dobrze napisany parser na uarta, wykorzystujący callback to tego dobrze napisane fifo, zobacz jak to wszystko powinno wyglądać, bo teraz masz nie skalowalny kod i do tego nie działający którego nie ma sensu naprawiać/analizować.

    Dodano po 2 [minuty]:

    źle napisałem fifo dla uarta, a parser dla fifo.
  • #3
    wojlej
    Level 17  
    hmmm, szczerze mówiąc nie jest mi potrzebne skomplikowane rozwiązanie, wystarczy mi rozsądne odbieranie danych po Uart i rozpoznawanie komend...
  • #4
    BlueDraco
    MCUs specialist
    O tym właśnie mowa. Modem w każdej chwili może podesłać dowolną odpowiedź, niekoniecznie tę, której się spodziewasz. Długość odpowiedzi też może być dowolna - w takim przypadku Twoja prowizorka będzie zawijała ją dookoła. To nie ma prawa działać.
  • #5
    mikkel
    Level 13  
    wojlej, podeślij mi na priva najlepiej cały projekt (lub pliki programu oraz konfiguracji) to sprawdzę u siebie. Też odpalam ten moduł, co prawda na innym stmie ale zasada jest ta sama.
    Piszesz że otrzymujesz tylko jeden znak, czy to jest zawsze konkretny czy pierwszy z odpowiedzi?
    Chyba masz źle pwrkey.
    Moja sekwencja, działająca, to:
    Code: c
    Log in, to see the code