Skocz do zawartości

UART STM32 i Arduino


Pomocna odpowiedź

Napisano

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

(edytowany)

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

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."

 

 

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?

@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.

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?

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 🙂

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...