Da ich schon länger ein STM32F4-Discovery Board herum liegen habe wollte ich es endlich mal programmieren. Glücklicherweise gibt es mittlerweile Arduino-Unterstützung dafür. Eine Anleitung, wie es zu installieren ist, gibt es hier: http://grauonline.de/wordpress/?page_id=1004 Aber Vorsicht! Wenn man das Blink Programm wie angegeben mit dem Output PC13 flasht, geht gleich gar nichts mehr, weil dieser Anschluss ausgerechnet für den Debugger verendet wird. Man muss also eine andere LED des Boards verwenden. Außerdem war bei meinem Board die ST-LINK Software veraltet, so dass erst einmal ein Update gemacht werden musste. Wenn man diese beiden Sachen beachtet, läuft es sehr schnell.
Das Board scheint auf Audio-Anwendungen ausgelegt zu sein, es hat ein Mikrophon und einen Verstärker: - MP45DT02 ST-MEMS-Audiosensor, omnidirektionales Digitalmikrofon - Audio-DAC CS43L22 mit integriertem Class-D-Lautsprechertreiber - 3-Achsen-ST-MEMS-Beschleunigungsmesser LIS302DL oder LIS3DSH - Acht LEDs - Zwei Tasten (benutzerdefiniert und Reset) Manual: http://www.st.com/content/ccc/resource/technical/document/user_manual/70/fe/4a/3f/e7/e1/4f/7d/DM00039084.pdf/files/DM00039084.pdf/jcr:content/translations/en.DM00039084.pdf Mal schauen, ob sich ein passender Treiber für die Audio-Peripherie finden lässt. Ich hänge mal das modifizierte Blink-Programm an, welches die grüne LED blinken lässt.
Muss heute alles Verarduinosiert werden? ;) Hättest aber wenigstens in deinem Blink-Programm die Farbe anpassen können.
>Hättest aber wenigstens in deinem Blink-Programm die Farbe anpassen >können. Welche Farbe soll's denn haben? Bin mir gar nicht sicher, ob es eine MultifarbLED hat. Mal sehen ...
Öhm ... kleines Missgeschick ;-) Derweil habe ich noch ein kleines Lauflicht gemacht. Diesmal mit den richtigen Farben. In der Beschreibung steht zwar 8 LEDs, so weit ich sehe, kann man aber nur 5 davon ansteuern. Wobei die 5.te LED mit dem Anschluss "OTG Over Current" kollidiert. Ich habe sich trotzdem mal mit aufgenommen. Sie ist invertiert und es gibt einen 50 Ohm Vorwiderstand, der den OTG-Ausgang höchst wahrscheinlich überleben lässt ...
>Glücklicherweise gibt es mittlerweile Arduino-Unterstützung dafür. Beauty is in the eye of the beholder.... Es gibt wie 100 anleitungen wie man ein anständiger IDE mit dem STM32 nutzen kann... Der "Arduino way" ist evtl. nutzlich, aber inzwischen konnten ein bisschen es mit einen paar extra Features ausrüsten, wie syntax highlight und code-aware menus... Anfänger und nicht so Anfänger könnten davon profitieren :) Dann, wie wäre es mit einem I2S Demo :) Ich hab das Datenblatt des CS43L22 angeschaut... ich werde auch was versuchen :)
>Dann, wie wäre es mit einem I2S Demo :)
Hervorragend, ich bin auf das Ergebnis gespannt ;-)
Im Anhang noch ein Beispiel für den "User-Button"
Scheinbar geht die serielle Schnittstelle über USB nicht. Deshalb habe ich einen seriellen Adapter an den Pin PC1 angeschlossen und schnell ein Soft-Serial geschrieben, damit man ein paar Werte debuggen kann.
Hier mal eine kleine Applikation mit Mikrofon: Ein VU-meter ;-) Da das Board ein Mikrophon hat, kann man es nutzen, um die Lautstärke zu detektieren und mit den LEDs anzuzeigen.
Leute, lasst den Arduino Quatsch und lernt gescheit wie das mit Audio geht. Denn das geht nur sinnvoll mit der DMA Peripherie darauf.
>lasst den Arduino Quatsch und lernt gescheit wie das mit Audio geht. >Denn das geht nur sinnvoll mit der DMA Peripherie darauf. Es gibt nichts Gutes, es sei denn, man tut es. Alles andre Hätte,Wenn und Aber ... ist alles nur gelaaber.
Das "analogReadSerial"-Example. Man muss im Vergleich zum Arduino Uno den Analog-Port im setup initialisieren. z.B.
1 | pinMode(PA1, INPUT_ANALOG); |
Im Anhang ein ziemlich gebasteltes Code-Beispiel für den Beschleunigungssensor LIS203DL, welches ich gefunden habe. Es gibt die Werte des Sensors seriell aus. Mittlerweile habe ich auch festgestellt, dass die hardware serielle Schnittstelle funktioniert ( mit externem Adapter ). Allerdings ist die Pin-Zuordnung etwas diffus: Im Beispiel wird Arduino-Serial2 verwendet. Das Signal kommt dann am Pin PD8 raus. Dieser wird aber im Manual mit USART3_TX bezeichnet.
Das fehlende Glied ist der Audio-Codec. Mit der Bibliothek von "mubase" an die passende Stelle kopiert, kann man einen Sinus erzeugen.
Es gibt scheinbar das neueste Update für das Discovery Board hier: https://github.com/stm32duino/Arduino_Core_STM32F4 Hat jemand eine Ahnung, wie man das installiert?
Markus schrieb: > Hat jemand eine Ahnung, wie man das installiert? https://github.com/stm32duino/wiki/wiki/Getting-Started
Alex schrieb: > Ich hab das Datenblatt des CS43L22 angeschaut... ich werde auch was > versuchen :) Der taugt schon was, ich empfehle dir aber, für die Initialisierung mal die Libraries von Uwe B. anzuschauen, da die Kiste ein wenig zickig ist. http://mikrocontroller.bplaced.net/wordpress/?page_id=46 So funktioniert es, sofern I²C richtig läuft. Bei Bedarf kann ich auch mal meine Routinen posten. Genervt schrieb: > Denn das geht nur sinnvoll mit der DMA Peripherie darauf. Nicht unbedingt. Ich z.B. lade den Codec per Interrupt nach aus dem Audiobuffern, weil ich eben nicht nur Musik abspiele, sondern eine Aufnahme/Wiedergabe Option punktgenau schalten möchte (ist ja ein Multitracker bei mir). Kostet auch so gut wie keine Rechenzeit. Allerdings sind die Onchip ADCs für Audio nicht zu gebrauchen, bei mir hängt am I2S2 ein Cirrus ADC.
>Autor: Nico W. (nico_w) >>Markus schrieb: >> Hat jemand eine Ahnung, wie man das installiert? >https://github.com/stm32duino/wiki/wiki/Getting-Started Danke dafür. Aber wenn ich dem Wiki folge, scheint im Board-Manager das STM32F4 Discovery Board nicht aufzutauchen. Wenn ich es richtig sehe, werden die Packages in ZIP-Files verpackt und die bekommen eine Versionsnummer. Aber das Pakete für das STM32F4 Discovery ist noch nicht drinn: https://github.com/stm32duino/BoardManagerFiles/tree/master/STM32/packages
Markus schrieb: > Aber das Pakete für das STM32F4 Discovery ist noch nicht drinn: Ist ja anscheinend auch erst zwei Tage alt. Ich habe ansonsten das hier noch gefunden: http://jeelabs.org/book/1542a/ https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Installation
Markus schrieb: > Scheinbar geht die serielle Schnittstelle über USB nicht. > Deshalb habe ich einen seriellen Adapter an den Pin PC1 angeschlossen > und schnell ein Soft-Serial geschrieben, damit man ein paar Werte > debuggen kann. Man könnte auch einfach einen der 6!! Hardware USARTs verwenden und den Prozessor somit nicht schon zu 50% nur für die Ausgabe von 3 Zeichen auszulasten, aber was weiß ich schon... mfg
> Autor: Matthias S. (Firma: matzetronics) (mschoeldgen) >Alex schrieb: >> Ich hab das Datenblatt des CS43L22 angeschaut... ich werde auch was >> versuchen :) >Der taugt schon was, ich empfehle dir aber, für die Initialisierung mal >die Libraries von Uwe B. anzuschauen, da die Kiste ein wenig zickig ist. Im obigen Beispiel werden diese Codec-Routinen verwendet: https://github.com/mubase/STM32F4-Arduino-core/blob/master/cores/maple/libmaple/stm32f4codec/codec.h "mubase" hat dort einfach eine Software I2C Schnittstelle verwendet. Damit umgeht er alle Probleme mit dem Hardware-I2C Interface und große Nachteile bringt es auch nicht, weil die Konfiguration für den Codec sowieso nur einmal gemacht wird und deshalb langsam sein kann. Das Setup des Chips scheint nicht so kompliziert, es müssen wohl nur ein paar I2C-Register beschrieben werden, wie man im Code sieht. Ganz anders sieht es meiner Meinung nach für das Mikrofon aus. Oben habe ich ja ein Beispiel gepostet. Ich würde sagen, es ist sogar ein wenig trickreich, oder gibt es eine schnellere Methode, das PDM Signal zu demodulieren?
>Autor: Nico W. (nico_w) >Markus schrieb: >> Aber das Pakete für das STM32F4 Discovery ist noch nicht drinn: >Ist ja anscheinend auch erst zwei Tage alt. Bei den Paketen im Repository https://github.com/stm32duino/BoardManagerFiles/tree/master/STM32/packages gibt es ja auch nur F0,F1 und L4 MCU Typen. Daher nehme ich an, dass die neuen Pakete, an denen gerade gearbeitet wird für den STM32F4 noch nie in diesem Paket Manager war. Ich glaube aber, dass diese schon weitgehend funktionieren, deshalb ist die Frage, wie man sie ohne den Paketmanager in Betrieb nimmt. >Ich habe ansonsten das hier noch gefunden: >http://jeelabs.org/book/1542a/ >https://github.com/rogerclarkmelbourne/Arduino_STM... In dem Link schreibt Roger Clark: "Copy the Arduino_STM32 folder to My Documents/Arduino/hardware (note. if the hardware folder doesn't exist you will need to create it)" Mir war bis jetzt nicht bekannt, dass die "Hardware-Beschreibung im Arduino-Folder liegen soll. Ich hab's gerade mal dahin kopiert und es funktioniert nicht.
> Ich hab's gerade mal dahin kopiert und es funktioniert nicht.
IDE neu gestartete?
Ich habe exakt dieses neueste Repo https://github.com/stm32duino/Arduino_Core_STM32F4 hier hin geklont C:\Users\myName\Documents\Arduino\hardware\ Der Name des Ordners ist also dann "Arduino_Core_STM32F4" die Arduino IDE 1.6.9 neu gestartet und den Computer ebenso. Eigentlich sollte jetzt laut Anleitung im Board-Manager die zwei im Repo befindlichen Varianten STM32F407VG_Disco STM32F429ZI_Nucleo auftauchen. Sehe ich das falsch? Es würde mir sehr helfen, wenn mir jeman mitteilt, ob auf seinem Rechner das Repo funktioniert. Dann kann weiß ich, dass es an meiner Installation liegen muss. Ansonsten kann es auch das Repo sein.
Interessant, das Repository wurde die letzten Tage schon ordentlich bearbeitet. Gerade eben das letzte mal vor einer Stunde. Den Kommentaren nach zu urteilen, scheint schon einiges gut zu funktionieren: https://github.com/stm32duino/Arduino_Core_STM32F4/pulse Die Frage ist nur: Wie einbinden?
So wie es aussieht, ist das neue Repository "brandneu" so dass es noch nicht für den offiziellen Gebrauch vorgesehen ist. Es wird wohl von STM selber bebaut, sodass man bald eine richtig gute Arduino Version für das STM32F4 Discovery erwarten kann. Im Repository sieht man, dass sie auch das STM32F429zi Nucleo unterstützen: https://github.com/stm32duino/Arduino_Core_STM32F4/tree/master/variants http://www.st.com/en/evaluation-tools/nucleo-f429zi.html Schöner wäre noch das 32F429IDISCOVERY http://www.st.com/en/evaluation-tools/32f429idiscovery.html Es hat ein Display und 8MByte Ram. In der Beschreibung wird es zwar nicht explizit erwähnt, aber scheinbar hat es ein ILI9341 TFT Display. Für dieses gibt es ja mittlerweile haufenweise Treiber, sodass es ziemlich einfach wird, damit auch Graphik darzustellen.
So, mittlerweile habe ich doch tatsächlich eine Beschreibung gefunden, wie man das neue Repository installieren kann. Aber Achtung: Bei dem neuen Repository sind die Pin-Zuordnungen geändert. Man kann den Pin nicht mehr über z.B. PB0 ansprechen sondern nur über eine Nummer. Und wenn ich es richtig sehe, ist dann das Mikrofon und die gesamte Peripherie nicht mehr über digitalRead und digitalWrite ansprechbar und damit funktionieren die Beispiele hier in diesem Thread auch nicht mehr .... Mist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.