Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
einfache_ein-_und_ausgaben_mit_dem_arm [2019/02/04 14:10] – Externe Bearbeitung 127.0.0.1einfache_ein-_und_ausgaben_mit_dem_arm [2019/07/25 15:46] (aktuell) – [Videozusammenfassung] huwi
Zeile 21: Zeile 21:
 Falls das Tutorial-Projekt nicht mehr offen ist, öffnen Sie dies. Legen Sie bitte ein neues kleines Programm an und laden das Grundgerüst ARM C++ Anwendung. Beachten Sie die Einstellungen für die Zielplattform STM32F4-Discovery. Falls das Tutorial-Projekt nicht mehr offen ist, öffnen Sie dies. Legen Sie bitte ein neues kleines Programm an und laden das Grundgerüst ARM C++ Anwendung. Beachten Sie die Einstellungen für die Zielplattform STM32F4-Discovery.
  
->>{{:neueeva.jpg?700|}}+>{{:neueeva.jpg?700|}}
  
 Erstellen Sie die Programmkopfdokumentation. Übersetzen und Übertragen Sie das noch leere Programm auf den Controller, um die Verbindung zu testen. Erstellen Sie die Programmkopfdokumentation. Übersetzen und Übertragen Sie das noch leere Programm auf den Controller, um die Verbindung zu testen.
  
->>><code cpp>+><code cpp>
 //---------------------------------------------------------------------- //----------------------------------------------------------------------
 // Titel     : Beispiel intelligenter Lichtschalter 1 mit SiSy STM32 // Titel     : Beispiel intelligenter Lichtschalter 1 mit SiSy STM32
Zeile 44: Zeile 44:
 Rekapitulieren wir noch mal das Blockbild von oben. Man erkennt, dass der RCC-Unit (Reset & Clock Control ) mitgeteilt werden muss, dass GPIOD und GPIOA über den AHB1 mit Takt versorgt werden müssen. Wie bereits im Beispiel //HalloARM//, benutzen wir dafür die Funktion //RCC_AHB1PeriphClockCmd// aus den STM32F4-Peripherie-Treibern.  Rekapitulieren wir noch mal das Blockbild von oben. Man erkennt, dass der RCC-Unit (Reset & Clock Control ) mitgeteilt werden muss, dass GPIOD und GPIOA über den AHB1 mit Takt versorgt werden müssen. Wie bereits im Beispiel //HalloARM//, benutzen wir dafür die Funktion //RCC_AHB1PeriphClockCmd// aus den STM32F4-Peripherie-Treibern. 
  
->>><code cpp>+><code cpp>
 // GPIOD Takt einschalten  // GPIOD Takt einschalten 
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
Zeile 60: Zeile 60:
 als Nächstes die Initialisierungsstrukturen für die beiden Ports vorzubereiten. Dazu können zwei Instanzen der Struktur angelegt werden oder nur eine, um diese dann wieder zu verwenden. Wir entscheiden uns für die Wiederverwendung einer Struktur.  als Nächstes die Initialisierungsstrukturen für die beiden Ports vorzubereiten. Dazu können zwei Instanzen der Struktur angelegt werden oder nur eine, um diese dann wieder zu verwenden. Wir entscheiden uns für die Wiederverwendung einer Struktur. 
  
->>><code>+><code>
 GPIO_InitTypeDef  GPIO_InitStructure; GPIO_InitTypeDef  GPIO_InitStructure;
 GPIO_StructInit (&GPIO_InitStructure); GPIO_StructInit (&GPIO_InitStructure);
Zeile 67: Zeile 67:
 Jetzt kümmern wir uns um den Ausgang für die LED, PortD Bit15. Dieser muss im Output Mode als Gegentaktstufe, also Push-Pull arbeiten und benötigt kein PullUp oder PullDown. Die Geschwindigkeit des Ports ist uns bei dieser Anwendung eigentlich recht egal. Strom müssen wir jetzt nicht sparen, also belassen wir es bei den 100 MHz. Jetzt kümmern wir uns um den Ausgang für die LED, PortD Bit15. Dieser muss im Output Mode als Gegentaktstufe, also Push-Pull arbeiten und benötigt kein PullUp oder PullDown. Die Geschwindigkeit des Ports ist uns bei dieser Anwendung eigentlich recht egal. Strom müssen wir jetzt nicht sparen, also belassen wir es bei den 100 MHz.
  
->>><code cpp>+><code cpp>
 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15; GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
Zeile 78: Zeile 78:
 Kümmern wir uns jetzt um den Eingang für den Taster, Port A Bit0. Der blaue Taster auf dem STM32F4 hat eine kleine Treiberstufe, die zwischen High und Low umschaltet. Ist der Taster nicht gedrückt, zieht die Treiberstufe die Pin A.0  auf Low. Wird der Taster gedrückt, wird Pin A.0 gegen High geschaltet. Der Taster ist also Hihg-Aktiv und benötigt weder einen PullUp noch ein PullDown. Kümmern wir uns jetzt um den Eingang für den Taster, Port A Bit0. Der blaue Taster auf dem STM32F4 hat eine kleine Treiberstufe, die zwischen High und Low umschaltet. Ist der Taster nicht gedrückt, zieht die Treiberstufe die Pin A.0  auf Low. Wird der Taster gedrückt, wird Pin A.0 gegen High geschaltet. Der Taster ist also Hihg-Aktiv und benötigt weder einen PullUp noch ein PullDown.
  
->>><code cpp>+><code cpp>
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
Zeile 89: Zeile 89:
 Das Einlesen eines Port-Pin erfolgt mit der Funktion //GPIO_ReadInputDataBit// aus den STM32F4 Peripherietreibern. Die Funktion erwartet den Port und das Bit als Parameter und liefert mit 0 oder 1 den aktuellen Status des Port-Pins als Rückgabewert. Das können wir recht nett auswerten. Das Einlesen eines Port-Pin erfolgt mit der Funktion //GPIO_ReadInputDataBit// aus den STM32F4 Peripherietreibern. Die Funktion erwartet den Port und das Bit als Parameter und liefert mit 0 oder 1 den aktuellen Status des Port-Pins als Rückgabewert. Das können wir recht nett auswerten.
  
->>><code cpp>+><code cpp>
 if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==1) if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==1)
 </code> </code>
Zeile 95: Zeile 95:
 Entsprechend der Auswerung können wir mit den bereits bekannten Funktionen //GPIO_SetBit// und //GPIO_ResetBit// die LED einschalten: Entsprechend der Auswerung können wir mit den bereits bekannten Funktionen //GPIO_SetBit// und //GPIO_ResetBit// die LED einschalten:
  
->>><code cpp>+><code cpp>
 GPIO_SetBits(GPIOD,GPIO_Pin_15); GPIO_SetBits(GPIOD,GPIO_Pin_15);
 </code> </code>
Zeile 101: Zeile 101:
 oder ausschalten: oder ausschalten:
  
->>><code cpp>+><code cpp>
 GPIO_ResetBits(GPIOD,GPIO_Pin_15); GPIO_ResetBits(GPIOD,GPIO_Pin_15);
 </code> </code>
Zeile 109: Zeile 109:
 Zuerst wieder der Entwurf in Form von Kommentaren: Zuerst wieder der Entwurf in Form von Kommentaren:
  
->>><code c>+><code c>
 //---------------------------------------------------------------------- //----------------------------------------------------------------------
 // Titel     : ENTWURF intelligenter Lichtschalter 1 in SiSy STM32 // Titel     : ENTWURF intelligenter Lichtschalter 1 in SiSy STM32
Zeile 161: Zeile 161:
 Nachdem wir den Entwurf in Ruhe rekapituliert haben, kann es an die Umsetzung gehen. Wenn Sie Quelltexte lieber kopieren, können Sie das gern mit dem obigen Entwurf machen, aber die eigentlichen Befehle sollten Sie aus //lernpsychologischen// Überlegungen tatsächlich selbst und bewusst, demzufolge //selbstbewusst//, eintippen. Nachdem wir den Entwurf in Ruhe rekapituliert haben, kann es an die Umsetzung gehen. Wenn Sie Quelltexte lieber kopieren, können Sie das gern mit dem obigen Entwurf machen, aber die eigentlichen Befehle sollten Sie aus //lernpsychologischen// Überlegungen tatsächlich selbst und bewusst, demzufolge //selbstbewusst//, eintippen.
  
->>><code c>+><code c>
 //---------------------------------------------------------------------- //----------------------------------------------------------------------
 // Titel     : Beispiel intelligenter Lichtschalter 1 in SiSy STM32 // Titel     : Beispiel intelligenter Lichtschalter 1 in SiSy STM32
Zeile 239: Zeile 239:
   - Brennen   - Brennen
  
->>>{{:tasterblaueled.jpg?500|}}+>{{:tasterblaueled.jpg?500|}}
  
 Die blaue LED auf dem STM32F4 Discovery leuchtet jetzt immer solange, wie der blaue Taster gedrückt ist.  Die blaue LED auf dem STM32F4 Discovery leuchtet jetzt immer solange, wie der blaue Taster gedrückt ist. 
Zeile 271: Zeile 271:
 Und hier diesen Abschnitt dann auch als Videozusammenfassung. Und hier diesen Abschnitt dann auch als Videozusammenfassung.
  
->>><html><iframe width="640" height="400" src="https://www.youtube.com/embed/HVHzasneQeo" frameborder="0" allowfullscreen></iframe></html>+><html><iframe width="640" height="400" src="https://www.youtube.com/embed/HVHzasneQeo" frameborder="0" allowfullscreen></iframe></html>
  
 ====== Nächstes Thema ====== ====== Nächstes Thema ======
   * [[SystemTickC|Der SystemTick in C]]   * [[SystemTickC|Der SystemTick in C]]