USB-MIDI-Interface mit STM32F4 Discovery?

Ich habe ein STM32F4 Discovery Board und möchte es als USBMIDI-Gerät verwenden/konfigurieren, aber diese Standardgeräteklasse wird von den von ST gelieferten USB-Bibliotheken nicht (vollständig) unterstützt. Irgendein Hinweis? Irgendein ähnliches Projekt auf STM32F4 mcus?

Danke :)

Midi ist nur seriell mit einer anderen Baudrate 31,25 oder einer solchen Zahl. Wenn Sie also eine USB-zu-Seriell-App haben, ändern Sie die Baudrate und los geht's.
Völlig richtig, aber ich müsste einen "virtuellen" Treiber auf der PC-Seite installieren; Andernfalls würde die Host-Software die Midi-Schnittstelle nicht erkennen.
Es ist sehr trivial, Sie stellen einen COM-Port auf 31250 und einen anderen COM-Port auf etwas Schnelleres (z. B. 115200) ein und verbinden diesen über USB mit Seriell mit dem Host. Echo, was auch immer auf der Midi-Seite zum Host kommt. Wenn Sie mehr als nur überwachen möchten, implementieren Sie eine Flusskontrolle, um die Midi-Seite nicht zu überlasten. Es dauert länger, diese Lösung zu tippen/über sie zu sprechen, als sie zu implementieren. Wenn die Host-Anwendung serielles Midi nicht unterstützt (was Midi IST), ist das ein separates Problem.
Die noch einfachere Lösung besteht darin, sich nicht um den Mikrocontroller zu kümmern und einfach ein USB-zu-Seriell-Board zu verwenden (kostet 10 bis 15 US-Dollar für ftdi-basierte Boards, die Sie möglicherweise sowieso für die Mikrocontroller-Lösung benötigen) und ändern Sie einfach die Baudrate auf 31250. sparkfun verkauft diese und die Midi-Breakout-Boards mit Midi-Anschlüssen.
Diejenigen, die serielle USB-Lösungen vorschlagen, scheinen zu ignorieren, dass das Ziel nicht darin besteht, etwas zu haben, das dem Host-PC wie ein serieller Anschluss erscheint, sondern eher etwas, das wie ein USB-Midi-Gerät aussieht. Beides könnte ein Weg zu einer funktionierenden Anwendung sein, aber ersteres wird Anwendungssoftware, die letzteres erwartet, nicht genügen, es sei denn, es wird eine Art Übersetzungstreiber auf Betriebssystemebene erstellt.
genau Chris ;)
Wenn es sich wie eine serielle Schnittstelle verhält, sich aber als MIDI-Gerät meldet, könnte es so einfach sein, nur den richtigen HID-Deskriptor auszuwählen (sind MIDI-Geräte überhaupt HID-basiert?).
Es gibt viele billige USB-MIDI-Geräte da draußen, für 20 US-Dollar könnten Sie sich eine Menge Arbeit sparen, wenn Sie das Rad neu erfinden. Sie könnten einen zerlegen und seine MIDI-Seite mit dem STM32 verbinden, wenn Sie den STM als eine Art MIDI-Instrument / Controller verwenden möchten.

Antworten (4)

Es ist nicht auf F4, aber überprüfen Sie dies: http://www.ucapps.de/mbhp_core_stm32.html Sie sind später zu LPC umgezogen: http://www.ucapps.de/mbhp_core_lpc17.html

Danke für Ihre Antwort. Ich kannte das Midibox-Projekt, aber leider ist das USB-Peripheriegerät, das in der MCU implementiert ist, um die die Midibox herum gebaut ist, ganz anders als das in stm32f4. Auch die dort verwendeten USB-Funktionen basieren nicht auf den neuen USB-OTG-Bibliotheken von ST Microelectronics, die die F4-Serie unterstützen.
Oh, dann weiß ich nicht ... Du bist auf dich allein gestellt. Aber die Verwendung von F4 für solche Aufgaben ist im Vergleich zu STM32/LPC-Midibox-Erstellern zu teuer.
@CLoNet - Sie sollten in der Lage sein, eine Implementierung von einem USB-Stack auf einen anderen zu portieren. Es kann hilfreich sein, wenn Sie ein Beispiel für den Ziel-Stack finden, der ähnliche Arten von Operationen verwendet, und dieses dann als Grundlage verwenden, um die spezifischen Operationen, die Sie aus dieser Implementierung kennen, für eine andere Plattform zu implementieren.

Das scheint das zu sein, was Sie wollen:

https://github.com/sebseb7/stm32-midi-demo

@CamilStaps: Was ist der "wesentliche Teil" eines Softwarearchivs?
Zum Beispiel Beispielverwendung. Wenn nicht das gesamte Archiv benötigt würde, sondern nur ein kleiner Teil, könnte der Code kopiert werden (da Sie dann nicht das gesamte Archiv benötigen würden). Die automatisierte Nachricht ist leider nicht sehr auf diese Fälle ausgerichtet. Wenn Sie dies weiter diskutieren möchten, sollten Sie auf Meta fragen, da Ihre Frage nicht spezifisch für diese Antwort ist.
Leider ist in diesem Fall der wesentliche Teil ein Vorlagenprojekt, das kompiliert und funktioniert. Es gibt keine wirkliche einzelne Idee, die es zum Laufen bringt. Es gibt eine Vielzahl von Kleinteilen, die zusammenpassen müssen.

Schauen Sie sich dieses Tutorial an ... https://www.midikits.net/USB_MIDI/USB_MIDI.htm

Sie verwenden einen virtuellen seriellen Port und fügen dann einen Roland-Treiber hinzu, der die seriellen Daten übernimmt und ein neues Midi-Gerät erstellt ...

Ja, MIDI ist nur seriell, aber Programme, die eine MIDI-Eingabe benötigen, können ihr MIDI auf diese Weise nicht erhalten. Allerdings gibt es wahrscheinlich Programme, die den seriellen Eingang nehmen und an einen virtuellen MIDI-Port zurückportieren können, der für Programme ziemlich transparent sein sollte. – zum Beispiel http://www.spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html