Forum: Mikrocontroller und Digitale Elektronik STM32F4 Discovery Arduino


von Markus (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

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.

von pegel (Gast)


Lesenswert?

Muss heute alles Verarduinosiert werden? ;)

Hättest aber wenigstens in deinem Blink-Programm die Farbe anpassen 
können.

von Markus (Gast)


Lesenswert?

>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 ...

von pegel (Gast)


Lesenswert?

Ich meine wenn die grüne blinkt sollte sie nicht REDLED heißen.

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Ö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 ...

von Markus (Gast)


Lesenswert?

Weiß jemand, wie man die serielle Schnittstelle verfügbar macht?

von Alex (Gast)


Lesenswert?

>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 :)

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

>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"

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

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.

von chris (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Genervt (Gast)


Lesenswert?

Leute,

lasst den Arduino Quatsch und lernt gescheit wie das mit Audio geht.
Denn das geht nur sinnvoll mit der DMA Peripherie darauf.

von HeulDoch (Gast)


Lesenswert?

>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.

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Das "analogReadSerial"-Example.

Man muss im Vergleich zum Arduino Uno den Analog-Port im setup 
initialisieren.

z.B.
1
 pinMode(PA1, INPUT_ANALOG);

von chris (Gast)


Angehängte Dateien:

Lesenswert?

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.

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Das fehlende Glied ist der Audio-Codec.

Mit der Bibliothek von "mubase" an die passende Stelle kopiert, kann man 
einen Sinus erzeugen.

von Markus (Gast)


Lesenswert?

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?

von Nico W. (nico_w)


Lesenswert?

Markus schrieb:
> Hat jemand eine Ahnung, wie man das installiert?

https://github.com/stm32duino/wiki/wiki/Getting-Started

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

>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

von Nico W. (nico_w)


Lesenswert?

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

von Felix F. (wiesel8)


Lesenswert?

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

von chris (Gast)


Lesenswert?

> 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?

von Markus (Gast)


Lesenswert?

>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.

von kopiert (Gast)


Lesenswert?

> Ich hab's gerade mal dahin kopiert und es funktioniert nicht.

IDE neu gestartete?

von Markus (Gast)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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?

von Markus (Gast)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.