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.
>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 :)
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.
>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.
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.
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.
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 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/variantshttp://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.