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
makeNun 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„
./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!
./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).