Programme für das STM32F4DISCOVERY Board unter Mac OS X 10.7 (Lion) erstellen und übertragen (flashen)

Voraussetzung für das compilen von ARM-Programmen ist die hier beschriebene Toolchain! Als erstes in das zuvor beschriebene stlink-Verzeichnis wechseln und das „Standard Periph Drivers“ Beispiel erstellen:

cd stlink/example/stm32f4/STM32F4xx_StdPeriph_Driver/build
make
Nun können wir das im stlink-Repository mitgelieferte Beispiel verändern, um später zu sehen, ob unser Code auch erfolgreich geflasht wurde. Dazu in das entsprechende Verzeichnis wechseln:

cd stlink/example/stm32f4/Projects/discovery_demoEs ist übrigens genau das Beispiel, welches ab Werk auf dem Board installiert ist. Wer dieses nicht anpassen möchte, den nächsten Schritt einfachen überspringen..

Nun z.B. in der Datei usbd_desc.c in Zeile 55 folgende Änderung vornehmen und speichern:
Alt:

#define USBD_MANUFACTURER_STRING      „STMicroelectronics“Neu:

#define USBD_MANUFACTURER_STRING      „STMicroelectronics Markus

Nun das Beispiel einfach per make erstellen.
Jetzt gibt es zwei Möglichkeiten das Programm auf das Board übertragen (flashen):
Möglichkeit 1)
cd stlink
./flash/flash write example/stm32f4/Projects/discovery_demo/STM32F4-Discovery_Demo.bin 0x8000000
./st-flash write example/stm32f4/Projects/discovery_demo/STM32F4-Discovery_Demo.bin 0x8000000Wichtig: Hier die .bin Datei verwenden, nicht die .elf Datei!

 

Möglichkeit 2)
cd stlink
./gdbserver/st-util 4242 usb

Dann in einem zweiten Terminal folgendes zum Flashen ausführen:

arm-none-eabi-gdb (gdb) target extended localhost:4242
(gdb) load STM32F4-Discovery_Demo.elf
(gdb) continue

Fertig! Du hast nun erfolgreich das Programm zum Board übertragen!

Um die oben durchgeführte Änderung am Sourcecode zu sehen, jetzt den zweiten (Mikro)USB-Port an den Mac anschließen und die Mac Software USB Prober bei angeschlossenem Board starten. Nun auf dem Board den blauen Taster (User Taster) betätigen. Ggf. im USB Prober den Refresh-Button betätigen. Es erscheint ein neues Gerät namens „Joystick in FS Mode“. In den Details sieht man nun die eben durchgeführte Änderung im Source Code (hier rot markiert):

 

Full Speed device @ 9 (0xFA130000): .............................................   Composite device: "Joystick in FS Mode"
    Port Information:   0x0018
           Not Captive
           External Device
           Connected
           Enabled
    Device Descriptor   
        Descriptor Version Number:   0x0200
        Device Class:   0   (Composite)
        Device Subclass:   0
        Device Protocol:   0
        Device MaxPacketSize:   64
        Device VendorID/ProductID:   0x0483/0x5710   (STMicroelectronics)
        Device Version Number:   0x0200
        Number of Configurations:   1
        Manufacturer String:   1 "STMicroelectronics Markus"
        Product String:   2 "Joystick in FS Mode"
Configuration Descriptor
        Length (and contents):   34
            Raw Descriptor (hex)    0000: 09 02 22 00 01 01 00 E0  32 09 04 00 00 01 03 01  
            Raw Descriptor (hex)    0010: 02 00 09 21 11 01 00 01  22 4A 00 07 05 81 03 04  
            Raw Descriptor (hex)    0020: 00 0A 
        Number of Interfaces:   1
        Configuration Value:   1
        Attributes:   0xE0 (self-powered, remote wakeup)
        MaxPower:   100 ma
        Interface #0 - HID/Boot Interface   
            Alternate Setting   0
            Number of Endpoints   1
            Interface Class:   3   (HID)
            Interface Subclass;   1   (Boot Interface)
            Interface Protocol:   2
            HID Descriptor   
                Descriptor Version Number:   0x0111
                Country Code:   0
                Descriptor Count:   1
                Descriptor 1   
                    Type:   0x22  (Report Descriptor)
                    Length (and contents):   74
                        Raw Descriptor (hex)    0000: 05 01 09 02 A1 01 09 01  A1 00 05 09 19 01 29 03  
                        Raw Descriptor (hex)    0010: 15 00 25 01 95 03 75 01  81 02 95 01 75 05 81 01  
                        Raw Descriptor (hex)    0020: 05 01 09 30 09 31 09 38  15 81 25 7F 75 08 95 03  
                        Raw Descriptor (hex)    0030: 81 06 C0 09 3C 05 FF 09  01 15 00 25 01 75 01 95  
                        Raw Descriptor (hex)    0040: 02 B1 22 75 06 95 01 B1  01 C0 
                    Parsed Report Descriptor:   
                          Usage Page    (Generic Desktop) 
                          Usage (Mouse)    
                              Collection (Application)    
                                Usage (Pointer)    
                                    Collection (Physical)    
                                      Usage Page    (Button) 
                                      Usage Minimum...........    (1)  
                                      Usage Maximum...........    (3)  
                                      Logical Minimum.........    (0)  
                                      Logical Maximum.........    (1)  
                                      Report Count............    (3)  
                                      Report Size.............    (1)  
                                      Input...................   (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield) 
                                      Report Count............    (1)  
                                      Report Size.............    (5)  
                                      Input...................   (Constant, Array, Absolute) 
                                      Usage Page    (Generic Desktop) 
                                      Usage (X)    
                                      Usage (Y)    
                                      Usage (Wheel)    
                                      Logical Minimum.........    (-127)  
                                      Logical Maximum.........    (127)  
                                      Report Size.............    (8)  
                                      Report Count............    (3)  
                                      Input...................   (Data, Variable, Relative, No Wrap, Linear, Preferred State, No Null Position, Bitfield) 
                                    End Collection     
                                Usage (Motion Wakeup)    
                                Usage Page    (Vendor Defined) 
                                Usage 1 (0x1)    
                                Logical Minimum.........    (0)  
                                Logical Maximum.........    (1)  
                                Report Size.............    (1)  
                                Report Count............    (2)  
                                Feature.................   (Data, Variable, Absolute, No Wrap, Linear, No Preferred, No Null Position, Nonvolatile, Bitfield) 
                                Report Size.............    (6)  
                                Report Count............    (1)  
                                Feature.................   (Constant, Array, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield) 
                              End Collection     
            Endpoint 0x81 - Interrupt Input   
                Address:   0x81  (IN)
                Attributes:   0x03  (Interrupt no synchronization data endpoint)
                Max Packet Size:   4
                Polling Interval:   10 ms

Getestet wurde dieses alles übrigens seinerzeit unter Mac OS X 10.6 (Snow Leopard) und danach auch unter Mac OS X 10.7 (Lion).

Wer das Ganze etwas bequemer innerhalb Eclipse erstellen und compilen möchte, kann sich hier in Svens Anleitung die nötigen Schritte anschauen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert