Forum: Mikrocontroller und Digitale Elektronik STM32 Kochrezept


von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Hallo mal wieder,

ich steh mal wieder aufm Schlauch. Wo finde ich die Info, dass die 
SYSCFG einen Clock benötigt? Hab die STM32-Hilfedatei, alle möglichen 
Manuals und die Sources durchsucht, aber nirgendwo einen Anhaltspunkt 
dafür gefunden (was nicht heißen soll, dass es keinen gibt). Wie kann 
ich in Zukunft, ohne das Internet nach Beispielen zu durchsuchen, selber 
sehen, wo ich wie anfange? Gibt es da ein Kochrezept, wie man da 
vorgeht? Bisher (nur GPIO / Timer) habe ich mir das Block Diagramm des 
STs angeschaut: Aha, Teil X hängt am AHB, also muss angetaktet werden, 
St-Hilfe angeschmissen, GPIO, InitTypeDef angeschaut. Dort auch alle 
Hilfeseiten zum GPIO angeschaut (die Erläuterungen, sind zumindest für 
Einsteiger, ein schlechter Witz). So wusste ich wenigstens so ungefähr 
was ich tue. Aber ohne Beispiele aus dem Internet, wäre das 
warscheinlich auch nichts geworden.

Liebe Grüße
Reggie

von Ingo L. (corrtexx)


Lesenswert?

Welche IDE?

von Michael N. (betonmicha)


Lesenswert?

Wichtig ist schonmal unterscheiden zu können was vom Chip zum ARM Kern 
gehört und was Peripherie ist. Den Teil zum ARM findest du bei ST 
nämlich nicht sondern in den Manuals zum ARM. Die gesamte Peripherie die 
von ST drumrum gestrickt wurde findest du in den Manuals zu deinem 
STM32. So kannst du schonmal die Grundlegenden Informationen über die 
Hardware erfahren.

In den Libs von ST (die neue Cube habe ich noch nicht benutzt) findest 
du in den Header Dateien einiges an Informationen. Leider hilft hier 
auch nicht alles weiter, bzw. ist logisch.

Ich muss ganz ehrlich gestehen das ich auch am Besten über Beispiele aus 
dem Internet gelernt habe. Habe auch vieles erst zum Teil verstanden.

Es gibt auch noch das Buch, ist aber in englischer Sprache verfasst: 
http://www.amazon.de/Definitive-Guide-Cortex-M3-Cortex-M4-Processors/dp/0124080820
Allerdings geht es hier um den ARM Kern.

Vielleicht haben ja noch andere hilfreiche Hinweise.

von m.n. (Gast)


Lesenswert?

SYSCFGEN findet man als Bit14 im RCC_APB2ENR-Register.

Ein wenig amüsiert mich Dein Vorgehen schon, da ich Dir eigentlich Wege 
aufgezeigt hatte, wie man effektiv und zielgerichtet mit den STM32 
starten kann. Aber anstatt ein Display zu aktivieren und interne Werte 
anzeigen zu lassen, sollte es gleich USB sein. Anstatt irgendein 
Rahmenprogramm auf einer überschaubaren IDE zum Laufen zu bekommen und 
schrittweise zu modifizieren, reichte es Dir nicht aus, daß die genannte 
EmBlocks IDE (vermeintlich) nur einen Monitor unterstützt. Du wolltest 
jedes Bit neu erfinden.

Aber gut, Du willst Deinen eigenen Weg gehen, Alles ganz genau ergründen 
(obwohl das am Anfang völlig nebensächlich ist), und siehst am Ende den 
Wald vor lauter Bäumen nicht.
So ist das ;-)

von Steffen R. (steffen_rose)


Lesenswert?

Ich für meinen Teil schaue erst in den Hardware Manuals nach, was 
gemacht werden muß. Erst dann schaue ich in die Sourcen, wie ich dies 
bewerkstelligen kann.

Und immer schön in die Manuals schauen, die zu deiner CPU gehören! Es 
gibt zwar viele Gemeinsamkeiten zwischen den Cortexen. Aber die 
Unterschiede machen den Kohl fett. Hier finde ich aber die Webseite von 
ST gut. Diese hat die verschiedenen zusammengehörenden Manuals bei den 
Derivaten aufgeführt. Für das Core handbuch muss man daher nicht 
unbedingt zu ARM wechseln. Wobei dies manchmal nicht verkehrt ist ;-)

Ach ja, und bitte bei solchen sehr ins Detail gehenden Fragen auch deine 
genaue CPU angeben. STM32 ist ein sehr weites Feld.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Ingo L. schrieb:
> Welche IDE?

CrossStudio, spielt das eine Rolle?


Michael N. schrieb:
> In den Libs von ST (die neue Cube habe ich noch nicht benutzt) findest
> du in den Header Dateien einiges an Informationen. Leider hilft hier
> auch nicht alles weiter, bzw. ist logisch.
>
> Ich muss ganz ehrlich gestehen das ich auch am Besten über Beispiele aus
> dem Internet gelernt habe. Habe auch vieles erst zum Teil verstanden.

Hehe, wir verstehen uns. Die Dokus kann man als Merkhilfe verstehen, 
aber eine echte Dokumentation für die Bibs sind sie nicht. Klar, wenn 
man seit Jahren STs programmiert, reicht die allemal. Für Anfänger fehlt 
ein Abschnitt mit Abhängigkeiten der grundlegenden Funktionen.


Michael N. schrieb:
> Es gibt auch noch das Buch, ist aber in englischer Sprache verfasst:
> 
http://www.amazon.de/Definitive-Guide-Cortex-M3-Cortex-M4-Processors/dp/0124080820
> Allerdings geht es hier um den ARM Kern.

Habe auch schon nach Büchern gesucht, aber war irgendwie nicht das 
Richtige dabei.


m.n. schrieb:
> SYSCFGEN findet man als Bit14 im RCC_APB2ENR-Register.

Habe ich auch schon gesehen, allerdings kann ich ja nicht jedes mal alle 
Register durchgehen um eine Antwort auf meine Frage zu finden.


m.n. schrieb:
> Ein wenig amüsiert mich Dein Vorgehen schon, da ich Dir eigentlich Wege
> aufgezeigt hatte, wie man effektiv und zielgerichtet mit den STM32
> starten kann. Aber anstatt ein Display zu aktivieren und interne Werte
> anzeigen zu lassen, sollte es gleich USB sein. Anstatt irgendein
> Rahmenprogramm auf einer überschaubaren IDE zum Laufen zu bekommen und
> schrittweise zu modifizieren, reichte es Dir nicht aus, daß die genannte
> EmBlocks IDE (vermeintlich) nur einen Monitor unterstützt. Du wolltest
> jedes Bit neu erfinden.
>
> Aber gut, Du willst Deinen eigenen Weg gehen, Alles ganz genau ergründen
> (obwohl das am Anfang völlig nebensächlich ist), und siehst am Ende den
> Wald vor lauter Bäumen nicht.
> So ist das ;-)

USB hat hiermit doch gar nichts am Hut ;)
Ich habe dir ja schon gesagt, dass ich gerne wissen will, was ich tue. 
Nicht unbedingt auf tiefster Ebene, dazu möchte ich keine Zeit 
"verschwenden". Für mich ist der µC eben Mittel zum Zweck und keine 
Spielerei.
Ich gehe einen anderen Weg, als du vllt einmal gegangen bist. Gerade als 
Programmierer, sollte man für andere Wege offen sein oder auch 
Verständnis zeigen. Oder wenigstens einfach mal hinnehmen wie es ist.


Danke für eure Antworten! Ich entnehme diesen mal, dass es nicht 
wirklich ein Kochrezept für die Herangehensweise an die Dokus gibt, wenn 
man kein erfahrener Anwender ist.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Steffen R. schrieb:
> Ich für meinen Teil schaue erst in den Hardware Manuals nach, was
> gemacht werden muß. Erst dann schaue ich in die Sourcen, wie ich dies
> bewerkstelligen kann.

Mit Hardware Manual meinst du das Reference Manual (RM0090)? Da habe ich 
eben leider nichts gefunden, weder unter RCC noch SYSCFG.


Steffen R. schrieb:
> Und immer schön in die Manuals schauen, die zu deiner CPU gehören!

Welches meinst du hier damit, das Programming Manual (PM0214)?


Steffen R. schrieb:
> Ach ja, und bitte bei solchen sehr ins Detail gehenden Fragen auch deine
> genaue CPU angeben. STM32 ist ein sehr weites Feld.

Ah OK, ich dachte, das gibt sich nicht viel bei der Fragestellung:

STM32F407VGT6 aufm Discovery Board

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


Lesenswert?

Reginald L. schrieb:
> Mit Hardware Manual meinst du das Reference Manual (RM0090)? Da habe ich
> eben leider nichts gefunden, weder unter RCC noch SYSCFG.

Aber warum schaust du gleich in den Registerbeschreibungen nach, wenn 
dir das ganze Bild fehlt? Fürs erste ist der grundlegende Aufbau, wie 
z.B. der Clocktree und das ganze System der Takterzeugung mit den PLLs 
wichtig, weil du sonst überhaupt nicht verstehst, wovon die Leute bei 
den Registern reden.

Wenn du sonst überhaupt noch keine Erfahrung mit MC gemacht hast, ist 
ein komplexes Stück wie die STM32 eine echte Herausforderung, weil wir 
es hier mit dem Produkt einer 40 Jahre währenden Entwicklung zu tun 
haben.

Es ist eigentlich besser, mit einem etwas kleineren Modell, wie dem PIC, 
dem AVR oder sogar noch dem alten Schlachtroß MCS51 anzufangen.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Ach ich Bananenbieger!!

Ich habs gefunden:
1
(@) SYSCFG APB clock must be enabled to get write access to SYSCFG_EXTICRx
2
       registers using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

Merke: Mehr in die Source Files reinschauen! Danke für den Tipp Steffen 
:D

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Matthias S. schrieb:
> Aber warum schaust du gleich in den Registerbeschreibungen nach, wenn
> dir das ganze Bild fehlt? Fürs erste ist der grundlegende Aufbau, wie
> z.B. der Clocktree und das ganze System der Takterzeugung mit den PLLs
> wichtig, weil du sonst überhaupt nicht verstehst, wovon die Leute bei
> den Registern reden.

Hab ich mir schon reingezogen. Bin Student und habe grad Semesterferien, 
dh von morgens 8 bis abends 11 sitz ich hier dran ;)

EDIT: Na, da erzählt auch jeder was anderes, wie man vorgehen soll. Aber 
ich bin den gleichen Weg gegangen, den du beschreibst.


Matthias S. schrieb:
> Es ist eigentlich besser, mit einem etwas kleineren Modell, wie dem PIC,
> dem AVR oder sogar noch dem alten Schlachtroß MCS51 anzufangen.

Sicher hast du recht, aber warum einfach, wenns auch kompliziert geht :) 
Nee, im Ernst, ich trau mir das schon zu. Es klappt ja auch, hoffe nur 
auf Hilfe von den Profis, wenn ich mal ne grundlegende Frage habe.

von m.n. (Gast)


Lesenswert?

Reginald L. schrieb:
> Ich gehe einen anderen Weg, als du vllt einmal gegangen bist. Gerade als
> Programmierer, sollte man für andere Wege offen sein oder auch
> Verständnis zeigen. Oder wenigstens einfach mal hinnehmen wie es ist.

Ich bitte Dich, ich habe Dir doch nie gesagt so und nicht anders. Bevor 
ich mit dem STM32 begonnen habe, hatte ich schon Jahrzehnte mit µCs zu 
tun und auch mit 32 Bittern und ihren vielen Optionen und 
Notwendigkeiten. Und dennoch hat es seine Zeit gedauert, die Eigenarten 
dieses ARMs zu sehen und so zu nutzen, wie sie vorgegeben sind.

Ich gratuliere Dir, wenn Du das Alles im Schnelldurchgang hinter Dir 
lassen kannst. Nur sehe ich, daß auch Dir nichts geschenkt wird, und daß 
auch andere Wege nicht unbedingt eine Abkürzung sind.

Reginald L. schrieb:
> Bin Student und habe grad Semesterferien,
> dh von morgens 8 bis abends 11 sitz ich hier dran ;)

Ich hatte seinerzeit noch die Nächte dabei ;-)

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

m.n. schrieb:
> Ich bitte Dich, ich habe Dir doch nie gesagt so und nicht anders. Bevor
> ich mit dem STM32 begonnen habe, hatte ich schon Jahrzehnte mit µCs zu
> tun und auch mit 32 Bittern und ihren vielen Optionen und
> Notwendigkeiten. Und dennoch hat es seine Zeit gedauert, die Eigenarten
> dieses ARMs zu sehen und so zu nutzen, wie sie vorgegeben sind.

Ein leichter Beigeschmack war aber schon rauszulesen ;)
Aber gerade dann könntest du ja ganz direkt auf meine gestellte Frage 
eine Antwort geben.


m.n. schrieb:
> Ich gratuliere Dir, wenn Du das Alles im Schnelldurchgang hinter Dir
> lassen kannst. Nur sehe ich, daß auch Dir nichts geschenkt wird, und daß
> auch andere Wege nicht unbedingt eine Abkürzung sind.

Aber jetzt muss ich dich mal bitten: Du hast mir doch das Display 
vorgeschlagen. Das ist doch geradezu der Schnelldurchgang. Momentan habe 
ich eine Taste mit einer LED programmiert und lege gerade einen 
Interrupt für das Eingangssignal des Phasengebers an, mit Timer zur 
Zeitmessung. Eine LED konnte ich damit schon zum Blinken bringen, zum 
Lernzweck. Ich sehe in meinem Weg keinen Schnelldurchgang, sondern eher 
das Gegenteil davon. Der Vorschlag mit dem Display ist da die Abkürzung: 
Code reinladen, Zeilen abändern und fertig ist der Hase, mal salopp 
ausgedrückt.
Also eine Abkürzung ist mein Vorgehen nun wirklich nicht.


m.n. schrieb:
> Ich hatte seinerzeit noch die Nächte dabei ;-)

Da warst du bestimmt auch keine 30 Jahre alt und warst am nächsten Tag 
ganz muffelig im Kopf, wenn du zu spät ins Bett bist ;)

von Steffen R. (steffen_rose)


Lesenswert?

Reginald L. schrieb:
> Ich habe dir ja schon gesagt, dass ich gerne wissen will, was ich tue.
> Nicht unbedingt auf tiefster Ebene, dazu möchte ich keine Zeit
> "verschwenden". Für mich ist der µC eben Mittel zum Zweck und keine
> Spielerei.

Die HAL und das CMSIS sind keine Peripherie-Treiber im herkömmlichen 
Sinne. Sie abstrahieren die unterste Schicht. Du bewegst Dich mit diesen 
Funktionen aber weiterhin auf dieser tiefen Ebene.

Reginald L. schrieb:
> Mit Hardware Manual meinst du das Reference Manual (RM0090)?

Ich meine hier die Gesamtheit der Dokumente:
- Datasheet DM00037051
- Reference Manual (RM0090)
- Programming Manual (PM0214)
- je nachdem gibts noch ein paar spezielle, wie z.B. zum Flash (PM0081)


Reginald L. schrieb:
> Steffen R. schrieb:
>> Ach ja, und bitte bei solchen sehr ins Detail gehenden Fragen auch deine
>> genaue CPU angeben. STM32 ist ein sehr weites Feld.
>
> Ah OK, ich dachte, das gibt sich nicht viel bei der Fragestellung:
>
> STM32F407VGT6 aufm Discovery Board

Die vorgeschlagene Buch ist für den Cortex-M3, Du hast Cortex-M4. Es 
gibt viele Gemeinsamkeiten. Du darfst beim Lesen aber nicht vergessen, 
dass es auch Unterschiede gibt und du dich im konkreten Fall in den 
Manuals zum Prozessor belesen mußt.
isg-stm32-v18d-scr.pdf von hitex wäre auch etwas zum Einstieg(-> google)

Reginald L. schrieb:
> EDIT: Na, da erzählt auch jeder was anderes, wie man vorgehen soll.

Es gibt viele Wege. Und jeder hat andere Erfahrungen gemacht. Bei solch 
unspezifischen Fragen ist dies normal. Und alles ist richtig.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Steffen R. schrieb:
> Sie abstrahieren die unterste Schicht. Du bewegst Dich mit diesen
> Funktionen aber weiterhin auf dieser tiefen Ebene.

Ich habe mich da falsch ausgedrückt. Ich meinte damit, dass ich 
möglichst nur die Treiber benutzen möchte um meine Wünsche zu 
realisieren. Nach Möglichkeit will ich es vermeiden mich mit den 
einzelnen Bits in den Registern zu beschäftigen, sofern eben möglich.


Steffen R. schrieb:
> Es gibt viele Wege. Und jeder hat andere Erfahrungen gemacht. Bei solch
> unspezifischen Fragen ist dies normal. Und alles ist richtig.

So habe ich die Erfahrung im Maschinenbau gemacht. Und jeder hat seine 
Vor- und Nachteile.

von Steffen R. (steffen_rose)


Lesenswert?

Reginald L. schrieb:
> Steffen R. schrieb:
>> Sie abstrahieren die unterste Schicht. Du bewegst Dich mit diesen
>> Funktionen aber weiterhin auf dieser tiefen Ebene.
>
> Ich habe mich da falsch ausgedrückt. Ich meinte damit, dass ich
> möglichst nur die Treiber benutzen möchte um meine Wünsche zu
> realisieren. Nach Möglichkeit will ich es vermeiden mich mit den
> einzelnen Bits in den Registern zu beschäftigen, sofern eben möglich.

Genau. Springender Punkt ist, dass die HAL kein Treiber ist (meine 
Meinung).
Sie vereinfacht nur den Zugriff auf die Bits in den Registern.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Steffen R. schrieb:
> Reginald L. schrieb:
>> Steffen R. schrieb:
>>> Sie abstrahieren die unterste Schicht. Du bewegst Dich mit diesen
>>> Funktionen aber weiterhin auf dieser tiefen Ebene.
>>
>> Ich habe mich da falsch ausgedrückt. Ich meinte damit, dass ich
>> möglichst nur die Treiber benutzen möchte um meine Wünsche zu
>> realisieren. Nach Möglichkeit will ich es vermeiden mich mit den
>> einzelnen Bits in den Registern zu beschäftigen, sofern eben möglich.
>
> Genau. Springender Punkt ist, dass die HAL kein Treiber ist (meine
> Meinung).
> Sie vereinfacht nur den Zugriff auf die Bits in den Registern.

Mit den HAL-"Treibern" habe ich mich bisher noch gar nicht 
auseinandergesetzt. Habe jetzt auch nicht unbedingt positives darüber 
gelesen. Wären die für Anfänger einen Versuch wert?

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.