Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uasrt [2017/03/17 17:53]
huwaldt
uasrt [2019/02/04 14:10]
Line 1: Line 1:
-====== Kommunikation mit dem PC ====== 
-Eingebettete Systeme besitzen oft eine Schnittstelle zur PC-Welt oder anderen eingebetteten Systemen. Das können ein USB-Anschluss,​ Ethernet, Infrarot, Bluetooth oder zum Beispiel auch WiFi sein. Eine nach wie vor oft verwendete Schnittstelle ist die gute alte [[http://​de.wikipedia.org/​wiki/​Universal_Asynchronous_Receiver_Transmitter|UART]]. Obwohl diese schon recht betagt ist finden wir faktisch in jeder Controllerfamilie diese Schnittstelle wieder. Der STM32F4 verfügt sogar über sechs UART bzw. USART. Die hohe Verfügbarkeit und die einfache Handhabung machen diese Schnittstelle sehr attraktiv. So können eingebettete Systeme über diese Schnittstelle Messwerte senden oder konfiguriert und debuggt werden. 
- 
-===== Die Aufgabe ===== 
-Die Aufgabe soll darin bestehen, die Zeichenkette //"​Hallo mySTM32!"//​ per UART an den PC zu senden. Dort werden die empfangenen Daten in einem Terminal-Programm angezeigt. ​ 
- 
->>>​{{:​hallopc.jpg?​600|}} 
- 
-===== Vorbereitung ===== 
-Falls Sie jetzt noch das Klassendiagramm geöffnet haben, wählen Sie im Kontextmenü (rechte Maustaste) des Diagramms den Menüpunkt „nach oben“. Falls das Projekt nicht mehr geöffnet ist, öffnen Sie das SiSy UML-Projekt wieder. ​ 
-Legen Sie ein neues Klassendiagramm an, wählen Sie die Sprache ARM C++ und stellen Sie die Hardware (STM32F407) ein. Beim Öffnen des Diagramms (rechte Maustaste, nach unten) laden Sie aus dem SiSy LibStore die Diagrammvorlage //​Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR)//. Weisen Sie das Treiberpaket für STM32F4 zu.  
- 
->​{{:​neueskldkommun.png?​330|}} {{:​umlprojekt11gg.jpg?​400|}} 
- 
-===== Lösungsansatz ===== 
-Da heutige Rechner kaum noch über eine klassische [[http://​de.wikipedia.org/​wiki/​RS-232|RS232-Schnittstelle (COM)]] verfügen, benutzen wir eine [[http://​shop.myavr.de/​Programmer%20und%20Bridges/​myUSBtoUART.htm?​sp=article.sp.php&​artID=200024|USB-UART-Bridge]]. Auf dem [[http://​shop.myavr.de/​ARM-Produktlinie/​mySTM32-Board-F4D,​%20Bausatz.htm?​sp=article.sp.php&​artID=200075|Zusatzboard]] für das STM32F4-Discovery existiert dafür ein entsprechendes Modul, die USB-UART-Bridge //​myUSBtoUART//​. 
- 
->>>​{{:​addonmitdiscovery.jpg?​400|}} 
- 
-Studieren wir das [[http://​www.st.com/​internet/​com/​TECHNICAL_RESOURCES/​TECHNICAL_LITERATURE/​DATASHEET/​DM00037051.pdf|Datenblatt]] stellen wir fest, dass sich die Sendeleitung TxD (transmit data) und die Empfangsleitung RxD (receive data) der USART3 als Alternativfunktionen über die Busmatrix auf verschiedene GPIO-Pins legen lassen. Wir wollen die USART3 am Port D verwenden. Damit lautet unsere Konfiguration:​ GPIO-Pin D8 ist die Sendeleitung TxD und GPIO-Pin D9 ist die Empfangsleitung RxD. Diese Pins liegen am Nächsten an unserer USB-UART-Bridge. Die Geschwindigkeit für die Datenübertragung legen wir mit 9600 Baud fest. 
- 
->>>​{{:​blockbilduart.jpg?​750|}} 
- 
-Verbinden Sie die Pins RxD und TxD der USB-UART-Bridge auf dem [[http://​shop.myavr.de/​ARM-Produktlinie/​mySTM32-Board-F4D,​%20Bausatz.htm?​sp=article.sp.php&​artID=200075|Zusatzboard]] mit den Pins PD8 (RxD3) und PD9 (TxD3). Benutzen Sie dazu geeignete Patchkabel. Beachten Sie, dass die RxD jeweils mit TxD über Kreuz verbunden sein muß. (TxD3 - > RxD, RxD3 - > TxD).  
- 
->>>​{{:​uart3verbunden.png?​450|}} 
- 
-Zusätzlich ist die USB-UART-Bridge mit dem PC zu verbinden. Dazu benötigen Sie ein zweites Mini-USB-Kabel. Über die USB-Verbindung zum integrierten ST-LINK/V2 wird der Controller programmiert und das System mit Spannung versorgt. 
- 
-===== Entwurf ===== 
-Für die zu entwerfende Anwendung wollen wir vorhandene Bausteine (Klasse/​Templates) für die UART nutzen. Der Einfachheit halber suchen wir im Explorer mit dem Suchtext **UART**; oder im Navigator bei den UML Paketen des Frameworks (UML-Pakete/​Pec/​pec_Uart). Wir werden fündig mit dem allgemeinen Interface für eine PecUart. 
- 
->​{{:​uartinterface.jpg?​700|}} 
- 
-Die konkreten Templates für die UART-Anbindung an einen bestimmten Port finden Sie mit dem Suchtext **UARTList** oder unter UML-Pakete/​UartList_stm32f4. 
->​{{:​hallouart.png?​750|}} 
- 
-Ergänzen Sie die Grundstruktur zu dem hier gezeigten Entwurf. 
- 
-===== Realisierung ===== 
-Nachdem wir die benötigten Bausteine (//PecUart, usart3portD8_stm32f4,​ baudrate9600//​) aus der Bibliothek gezogen und zu einer Komponente (//​Terminal//​) zusammengesetzt haben, wurde diese im System (//​Controller//​) als Instanz (//​terminal//​) aggregiert. Jetzt können wir die Instanz der Komponente benutzen. Realisieren Sie die geforderte Ausgabe der Zeichenkette "Hallo mySTM32!"​ wie folgt in der Methode //onWork//. 
- 
-//​**Controller::​onWork:​**//​ 
->>><​code cpp> 
-terminal.writeString("​Hallo mySTM32!\n"​);​ 
-waitMs(1000);​ 
-</​code>​ 
- 
->>>​{{:​uartseq1.png|}} 
- 
-===== Test ===== 
-Übersetzen Sie das Programm. Korrigieren Sie ggf. Schreibfehler. Übertragen Sie das lauffähige Programm in den Programmspeicher des Controllers und Starten das Werkzeug ControlCenter. 
-  - Erstellen (Kompilieren und Linken) 
-  - Brennen 
-  - Menü Werkzeuge, ControlCenter 
- 
-Stellen Sie im ControlCenter die Parameter für die Verbindung mit dem Board ein. Achten Sie auf den richtigen COM-Port und die korrekte Baudrate. 
-Der COM-Port ist ggf. dem Gerätemanager zu entnehmen. 
- 
->​{{:​controlcentereinstellungen.jpg?​750|}} 
- 
-Jetzt können Sie die gewünschten Daten vom Controller empfangen. ​ 
- 
->​{{:​hallocc.jpg?​750|}} 
- 
-====== Erweiterung ====== 
-Als Erweiterung der Anwendung sollen Zeichen vom PC empfangen und wieder zurückgesendet werden. Dabei ist zu beachten, dass nur dann, wenn Zeichen verfügbar sind, diese auch von der UART abgeholt werden dürfen. Mit den Operationen //​dataAvailable//​ und //​writeByte//​ stellt die UART die benötigte Funktionalität zur Verfügung. Dieses "​Echo"​ ergänzen Sie bitte wie folgt in der Methode //onWork//. 
- 
-//​**Controller::​onWork:​**//​ 
->>><​code cpp> 
-while (terminal.dataAvailable()) 
-{ 
- char zeichen; 
- zeichen=terminal.readByte();​ 
- terminal.writeByte(zeichen);​ 
-} 
-</​code>​ 
- 
->>>​{{:​uartseq2.png|}} 
- 
-Tragen Sie im ControlCenter den zu sendenden Text ein und aktivieren Sie //Senden//. 
- 
-{{:​halloanwender.png?​600|}} 
- 
-====== Videozusammenfassung ====== 
- 
-Erlernte und gefestigte Arbeitsschritte:​ 
- 
-  - Klassendiagramm anlegen und öffnen 
-  - Diagrammvorlage für PEC Applikation auswählen, laden und Treiberpaket für STM32F4 einfügen ​ - Navigator auf UML Pakete umschalten 
-  - gewünschte Klassen im Explorer/​Navigator suchen und ins Diagramm ziehen 
-  - Klassen aggregieren 
-  - Operationen einer Klasse anlegen 
-  - Klassen und Templates zu Komponenten zusammenbauen 
-  - den nötigen Quellcode in den Operationen erstellen 
-  - Erstellen und Brennen einer ARM Applikation im Klassendiagramm 
-  - **das SiSy-Controlcenter konfigurieren und anwenden** 
- 
-Und hier diesen Abschnitt wiederum als Videozusammenfassung. 
- 
->>><​html><​iframe width="​600"​ height="​400"​ src="​https://​www.youtube.com/​embed/​d_MV0dplWgI"​ frameborder="​0"​ allowfullscreen></​iframe></​html>​ 
- 
-====== Übung ====== 
-Erweitern Sie zur Übung die Anwendung um einen Taster. Die Ausgabe "Hallo mySTM32!"​ per UART soll nur erfolgen solange der Taster gedrückt ist. Das Echo soll unabhängig von der gedrückten Taste zurück gesendet werden. 
- 
-====== Nächstes Thema ====== 
-  * [[ADC|Analogdaten erfassen]] 
  
uasrt.txt · Last modified: 2019/02/04 14:10 (external edit)