Kategorie: STM32 Projekte
Zugriffe: 36663

STM32CubeMX Testprojekt für die STM32-CAN Hardware

Dies ist mein erster Versuch um mich mit dem CubeMx vertraut zu machen.
Hinweise, was man besser machen kann sind willkommen!

Das Projekt ist auf Github hinterlegt:  Github: STM32-CAN - CubeMX Testprojekt 

Ziel ist es erst mal nur die LEDs anzusteuern zu können und über  CAN1 (Hight-Speed Treiber) CAN-Botschaften zu senden und empfangen zu können.

Dazu sind im Cube-Mx erst mal folgende Schritte erforderlich:

  1. Konfiguration der Prozessor Pins im Reiter "Pinout"

    CubeMX Pin Konfiguration
    Abb. 1.1 - Pin Konfiguration

    Hier werden die Pins für :
    - externer Quarz
    - CAN1/2   Tx/Rx Pins
    - CAN_RS - Steuerleitung für den High-Speed CAN-Treiber (low=aktiv, high bzw. Input Float  =standby Mode)
    - nCAN2_STB - Steureleitung für den Low-Speed CAN-Treiber
    - Inputs (PullUp) für den Jumper S2  (PA2,PC2)
    - LED Ausgänge (Push Pull)

  2. Clock Konfiguration:
    Der STM wird auf die maximale mögliche Clocks die mit einem externen 8 MHz Quarz möglich sind konfiguriert (Systemtak 72Mhz mittels PLL)

    CubeMx- Clockkonfiguration
    Abb 1.2  Clock-Konfiguration



  3. Konfiguration der einzelnen Hardwaremodule

    Konfigurationsübersicht aller CubeMX Module
    Abb. 1.3 Konfigurations übersicht

    CubeMX - CAN1 Parameter Settings
    Abb.1.4 CAN1-Parameter

    CAN1 Settings:
    - Baudrate 500 kBit
    - normal Mode  


    CubeMx - CAN1 ISR
    Abb. 1.5  ISR-Settings

    CubeMX - CAN1 GPIO-Settings
    Abb. 1.6 CAN1-GPIO-Settings

    CAN2 wird auf gleicherweise konfiguriert, wird hier aber nicht weiter betrachtet, das hier erst mal nur CAN1 verwendet wird.


    CubeMX - GPIO Pins Konfiguration
    Abb. 1.7  GPIO-Pin Konfiguration


    Die restlichen Einstellungen bleiben auf Default und jetzt kann mit "Generate Code" kein Keil V5 Projekt erzeugt werden.

    Dies Keil-Project hat dann folgenden Aufbau:

    Projekt Struktur vom generierten Keil Projekt


Achtung ist veraltet und gilt nur für die HAL-Version < 1.7

Anpassungen im erzeugten Keil-Projekt

 Bei Anpassungen im Code sollte man darauf Achten, dass man seinen Code nur in den  "USER CODE" Bereichen:
 /* USER CODE BEGIN 2 */

 /* USER CODE END 2 */

ändert, damit die Anpassungen nicht beim erneuten Generieren vom Keil Projekt überschrieben werden.
Die genaue Anpassungen im Code könnnen dem fertigen Projekt (s.o) entnommen werden.

Hier möchte ich nur auf ein paar grundsätzliche Dinge eingehen:

Zur Erinnerung, hier ist das komplette Projekt abgelegt:
 Github: STM32-CAN - CubeMX Testprojekt 

Dort ist auch noch ein eigener SysTickCallBack Handler implementiert um eigene Delay-Varriablen zu Verwalten, um z.B. Botschaften zyklisch senden zu können.

20.02.2016:  Das Projekt auf Github wurde jetzt um die USB-Funktionalität und um das Grundgerüst für die Verarbeitung von Lawicel - Befehle erweitert.  

Mit dem Makro PING_PONG werden alle empfangenen Zeilen auf als Echo zurückgesendet, dies dient nur zum Testen im Terminal um zu sehen, ob die USB-Kommunikation auch funktioniert.
Das Lawicel Grundgerüst besteht erst mal aus den Befehlen:

 

17.07.2016:  Das Projekt auf Github wurde jetzt um weitere Lawicel - Befehle erweitert, so dass der CAN-Hacker die empfangene CAN-Botschaften in der RX/Trace Liste anzeigt.

Folgende Lawicel Befehle werden jetzt in der Version V0.3 unterstüzt:

Das Senden der Testbotschaft beim Anschließen an USB wurde entfernt. Die Testbotschaft wird jetzt nur noch beim Sendewunsch gesendet (Std oder Extend ID).