3.6 🚧 UART / RS232

Synopsis: [de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter 🔗] [www.arduino.cc/reference/en/language/functions/communication/serial/ 🔗]
Nochmal anschauen: 2.6 Schieberegister

Ist die älteste und schwierigste einfache Serielle Schnittstelle. Die Datenübertragung erfolgt asynchron (eine Baud-Rate muss eingestellt werden) und hat Start- und Stopp-Bits ausserdem kann ein Paritätsbit übertragen werden.
Es ist die elementare serielle Schnittstelle für Arduino, darüber werden viele der Boards programmiert und darüber wird mit dem Seriellen Monitor kommuniziert.

Datenübertragung analysieren

Nun wollte ich mit dem Oszilloskop die Kommunikation mitschneiden und steckte den Tastkopf in D1/TX auf dem L152RE-Board und fand nur Rauschen.
In der Doku fand ich raus, dass die Pins D1/PA2/TX und D0/PA3/RX einfach abgeklemmt sind und sich erst mit Lötbrücken wieder anklemmen lassen: [Doku UM1724] Seite 25 6.8 USART Communication. Auf der ST-LINK-Platine können die Signale aber abgegriffen werden, zur Kommunikation wird USART2 verwendet.

void setup() {
  Serial.begin(9600); // USART2 PA2, PA3 mit ST-Link verbunden
}

void loop() {
  Serial.println("ab");
  delay(1000);
}

Übertragung mit Logic-Analyzer beobachten

Logic Analyzer verbinden
Logic Analyzer verbinden
Logic2 einstellen
Logic2 einstellen
Oszillogramm für Datenübertragung

Aufgaben

  1. Zeichnen Sie ein Blockdiagramm mit 2 Kommunikationsteilnehmern die mittels UARTs verbunden sind
  2. Erklären Sie die serielle Kommunikation
  3. Parity
    1. Ergänzen Sie jeweils zu gerader Parity (even)
      1. 01010101___
      2. 11001000___
      3. 00000001___
    2. Ergänzen Sie jeweils zu Ungerader Parity (odd)
      1. 01101010___
      2. 11100011___
      3. 00000000___
    3. Richtig oder fehlerhaft
      1. even 101011011
      2. odd 01011101
      3. even 111001111
    4. Erläutern sie, wie die Erkennung von Fehlern bei der Datenübertragung funktioniert
  4. Wie ist mit UARTs eine Vollduplex-Datenübertragung möglich?
  5. Wie kann bei der Datenübertragung mit UART auf eine Taktleitung verzichtet werden?
  6. Was versteht man unter einer asynchronen Datenübertragung?

Von Seriell-Monitor einlesen und Töne ausgeben

Vom Seriellen Monitor sollen Zeichen eingelesen und dann dabei Töne ausgegeben werden. Codevorgabe

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

void loop(){
  char zeichen;
  if(Serial.available()){
    zeichen = Serial.read();
    Serial.println(zeichen);
  }
}

Bluetooth

#define BTRX PB11 // USART3-RX
#define BTTX PB10 // USART3-TX
#define ENABLE PB12
#define STATE PA1
#define LED D13  // Board-LED

HardwareSerial SerialBT(BTRX,BTTX); 
char c; 

void setup() {
  Serial.begin(9600); // über Pins D0, D1
  SerialBT.begin(9600);  // über Pins D2, D3
  Serial.println("Bluetooth-Verbindung...");
  delay(100);
  pinMode(LED, OUTPUT);
  pinMode(STATE,INPUT);
  Serial.println("Ende Setup");
}

void loop() {
  digitalWrite(LED,digitalRead(STATE));
  if (SerialBT.available()){      // Daten liegen an
    c = SerialBT.read(); // Nachricht lesen
    Serial.print(c); 
  }
  if (Serial.available()) {
    c = Serial.read();
    //Serial.print(c); 
    SerialBT.print(c);
  }
}