Skocz do zawartości

UART STM32 i Arduino


kuba15

Pomocna odpowiedź

Witam,

Mam następujący problem. Otóż posiadam płytki STM32 Nucleo-64 f103rb oraz Arduino UNO i chciałbym przesyłać dane po UARCIE  z STM'a do Arduino. Oba urządzenia programuję w środowisku Arduino IDE. Robię dość zaawansowany projekt, który z powodzeniem przeniosłem z Arduino właśnie na tą płytkę STM'a.

Niestety robię coś źle, bo Arduino nie odbiera poprawnie przesyłanych do niego danych i nie wiem gdzie leży błąd.

Kod, który wgrywam do STM.

void setup() {
  Serial.begin(9600);
  
}

void loop() {
  Serial.print("Hello");
}

 

Kod, który wgrywam do Arduino

#define dioda 8
String data;

void setup() {
  pinMode(dioda, OUTPUT);
  Serial.begin(9600);
  
}

void loop() {
  
    if (Serial.available()) {
      data = Serial.read();
      if (data == "Hello") {
        digitalWrite(dioda, HIGH);
      }
    }
      
  
}

Ponadto połączenia: TX (PA9) z STM -> RX (0) Arduino oraz RX(PA10) z STM -> TX (1) Arduino oraz GND z GND

Nie wiem, czy błąd leży w programie w połączeniach, albo może w tym i w tym 😞 

Z góry dziękuję za pomoc

Link do komentarza
Share on other sites

Pierwsze co mi przyszło do głowy to różnica napięć, STM32 jest na 3,3V a UNO na 5V. Może konwerter poziomów logicznych by pomógł?

Dodatkowo można by się zastanowić z którego UARTa korzysta ST zaprogramowany w ten sposób. Nigdy nie programowałem tych mikrokontrolerów tak jak Arduino. Programując go w ten sposób, możesz odczytać dane na PC podłączonym przez USB z płytką? Spróbuj podłączyć do PA2 zamiast PA9.

Edytowano przez Rogal
Link do komentarza
Share on other sites

Zaawansowany projekt... ambitnie

W każdym razie proponuję powrót do początków i podstaw, przykładowo do metody read:
 

Cytat

 

"Description

Reads incoming serial data.

Serial.read() inherits from the Stream utility class.

Syntax

Serial.read()

Parameters

Serial: serial port object. See the list of available serial ports for each board on the Serial main page.

Returns

The first byte of incoming serial data available (or -1 if no data is available). Data type: int."

 

 

Link do komentarza
Share on other sites

2 godziny temu, Rogal napisał:

Pierwsze co mi przyszło do głowy to różnica napięć, STM32 jest na 3,3V a UNO na 5V. Może konwerter poziomów logicznych by pomógł?

Dodatkowo można by się zastanowić z którego UARTa korzysta ST zaprogramowany w ten sposób. Nigdy nie programowałem tych mikrokontrolerów tak jak Arduino. Programując go w ten sposób, możesz odczytać dane na PC podłączonym przez USB z płytką? Spróbuj podłączyć do PA2 zamiast PA9.

Tak, wyświetlanie danych z seriala na kompie działa bez problemu, a zamiana pinów z PA2 na PA9 nie pomogła 😞 

Wyczytałem gdzieś, że piny PA3 i PA2 nie są domyślnie podpięte pod UART, że trzeba ręcznie przelutowywać jakieś połączenia 😕 

Czy ktoś wie jakie porty są podpięte pod UART w tej konkretnej płytce STM'a lub co konkretnie trzeba zrobić, żeby te piny były dostępne?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@kuba15 Przeczytałeś dokumentację metody read() ? Wklejanie może słabo wygląda, więc podam jeszcze link: https://www.arduino.cc/reference/en/language/functions/communication/serial/read

Jeszcze na wszelki wypadek wytłumaczę, bo pogrubienie w tekście chyba nie wystarczyło - read() zwraca jeden bajt, nie napis. Więc to co napisałeś i tak nie zadziała, nawet jak napięcia będą idealne, piny poprawne itd. itp.

Link do komentarza
Share on other sites

2 minuty temu, Elvis napisał:

@kuba15 Przeczytałeś dokumentację metody read() ? Wklejanie może słabo wygląda, więc podam jeszcze link: https://www.arduino.cc/reference/en/language/functions/communication/serial/read

Jeszcze na wszelki wypadek wytłumaczę, bo pogrubienie w tekście chyba nie wystarczyło - read() zwraca jeden bajt, nie napis. Więc to co napisałeś i tak nie zadziała, nawet jak napięcia będą idealne, piny poprawne itd. itp.

Tak, przeczytałem i teraz już wiem, że kod jest błędny. Na pewno też są błędnie podłączone piny z STM'a, stąd moje pytanie czy ktoś wie które z nich są przypisane do UART?

Link do komentarza
Share on other sites

Problem rozwiązany - po zastosowaniu biblioteki HardwareSerial można wybrać jeden z dostępnych portów UART, np. PA10 - RX i PA9 - TX.

Dzięki wielkie za podsunięte pomysły - wszystkie się przydały 🙂

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.