Forum: Mikrocontroller und Digitale Elektronik Embedded System - STM32F429


von Dennis (Gast)


Lesenswert?

Hallo Zusammen,
ich würde mir gerne als Einstieg in Embedded Systems einen STM32F429 
zulegen. Dazu habe ich ein paar Verständnisfragen.

1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das 
Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene 
darüber?

2. Die Webseite 
http://mikrocontroller.bplaced.net/wordpress/?page_id=2736 bietet 
bereits tolle Libs. Das Nutzen dieser Libs ist jedoch reine 
Programmierarbeit bzw. Zugreifen auf fertige Funktionen. Aber wie geht 
man die Aufgabe an, wenn man ein solches Board kauft und solche Libs 
nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?

3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem 
Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne 
Betriebssystem aus, weil über die Libs lediglich die Register 
angesteuert werden und auf einem Mikrocomputer mit OS oft auch ganze 
Softwarepakete entwickelt werden?

von 6a66 (Gast)


Lesenswert?

Dennis schrieb:
> 1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das
> Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene
> darüber?

Das wird verscheiden gesehen. Manche bauen sich eine Lib für Ihre 
Bedürfnisse, andere verwenden möglichst nur bereits vorgefertigte.

Dennis schrieb:
> Aber wie geht
> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs
> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?

Dann beginnst Du bei Adam und Eva. Oder beim Autobau beginnst Du, 
erstmal Formen für Blechteile zu entwickeln.

Dennis schrieb:
> Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem
> Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne
> Betriebssystem aus, weil ...

Betriebssystem kostet üblicherweise Speicherplatz und Geschwindigkeit. 
Wenn man davon ausreichend hat für die geplante Anwendung und die 
Anwendung Dinge wie Multithreading oder File-IO benötigt dann ist ein OS 
schon schick und Du musst das Rad nicht neu erfinden.

rgds

von Plattetux (Gast)


Lesenswert?

Dennis schrieb:
> 1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das
> Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene
> darüber?

Eine Library ist erst mal nicht mehr als eine Zusammenfassung von Code, 
in der Regel mit dem Ziel den Code in verschiedenen Projekten wieder zu 
verwenden. Damit ist nicht weiter spezifiziert, auf welcher Schicht 
diese Bibliothek arbeitet. Bibliotheken z.B. zum Konvertieren von Zahlen 
<-> Zeichenketten, wird man kaum selbst neu erfinden wollen. Hat man 
aber z.B. ein bestimmtes Display, das speziell angesteuert werden muss, 
dann ist es durchaus gang und gäbe sich dafür eine Bilbiothek zu 
schreiben.
Bei Entwicklung von Firmware im Bereich von Embedded Systems von etwas 
zu sprechen was "eine ebene über der Firmware" liegt, macht wenig Sinn. 
Alles was auf einem µC ausgeführt wird, ist schließlich Teil der 
Firmware. Die Ebene darüber passiert dann eher außerhalb des Geräts, 
z.B. IoT, etc.


> Aber wie geht
> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs
> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?

Hier ist die Frage: Was für Libs meinst Du?
Geht es darum neue externe Sensorik anzubinden, dann beginnt man z.B. 
mit dem Studium des Datenblatts des Sensors. Geht es um ein bestimmtes 
Regelungsverfahren - dann eben damit sich mit diesem Regelungsverfahren 
auszeinander zu setzen. Oder allgemeiner mit der Frage: Was soll meine 
Lib denn machen?

> 3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem
> Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne
> Betriebssystem aus, weil über die Libs lediglich die Register
> angesteuert werden und auf einem Mikrocomputer mit OS oft auch ganze
> Softwarepakete entwickelt werden?

Ein OS ist meist erst dann richtig sinnvoll, wenn mehrere Programme sich 
um Ressourcen kloppen. Das muss dann verwaltet werden - angefangen bei 
Speicher, Rechenzeit, bis hin zum Zugriff auf Peripherie. Auf einem µC 
läuft aber i.d.R. ein einziges Programm für eine einzige ganz spezielle 
Aufgabe. Da ist es meist einfacher und effizienter den Zugriff 
verschiedener Unterprogrammteile auf diese Ressourcen manuell zu 
koordinieren, als das mit einem Betriebssystem zu bewältigen. Auch der 
Speicherbedarf ist bei einem Großteil der Aufgaben für µCs fix und 
braucht nicht zur Laufzeit verwaltet zu werden. Da gibt es für ein OS 
nichts zu tun.

von m.n. (Gast)


Lesenswert?

Dennis schrieb:
> ich würde mir gerne als Einstieg in Embedded Systems einen STM32F429
> zulegen. Dazu habe ich ein paar Verständnisfragen.

Deine Fragen lassen vermuten, daß Du noch nie etwas mit 
Miktoprozessoren/-controllern zu tun hattest. Sofern kein direkter Zwang 
zu diesem µC besteht oder keine besonders hohe Prozessorleistung 
gefordert wird, fange eine Nummer kleiner an; meinetwegen mit AVR oder 
einem Arduino.

Software für 'embedded' Systeme schreibt man nicht durch Zusammenklicken 
fertiger Lösungen für irgendwelche Probleme.

von Nop (Gast)


Lesenswert?

Dennis schrieb:

> 1. Was bedeutet allegemein die Entwicklung von Firmware?

Es bedeutet, ein Binärfile zu erzeugen, welches man in einen permanenten 
Speicher überträgt. Dadrin ist das komplette Programm nebst den Daten, 
die zur Erstellungszeit mitgegeben wurden.

> Schließt es das Programmiern von Libs mit ein?

Kann, muß aber nicht. Sinnvolle Libs sind recht generisch gehalten, 
damit man sie auf möglichst vielen Plattformen wiederverwenden kann. Das 
bedeutet oftmals einen gewissen Overhead. Je nachdem, wieviel Overhead 
und wieviel Entwicklungszeit dafür gespart wird, kann sich das bei der 
angepeilten Stückzahl lohnen oder auch nicht.

Spätestens, wenn man mit USB, IP-Stacks usw. arbeitet, wird man das 
nicht mehr alles selber programmieren wollen.

> Oder liegt die Firmware eine Ebene darüber?

Nein, die Firmware enthält alles.

>  Aber wie geht
> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs
> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?

Man liest sich das Datenblatt des Controllers durch und beginnt seine 
Software entlang des Ausführungsablaufs zu schreiben. Das Erste, was ein 
STM32 nach dem Start tut, ist, daß er sich den Stackpointer greift, der 
am Anfang des ROM liegt, und dann springt er in den Resetvektor.

Also reserviert man sich statisch ausreichend RAM in einem Array und 
legt dessen Adresse an den ROM-Start. Die Adresse der Resetfunktion 
folgt danach. Danach weitere Funktionsadressen, das ist die 
Interrupttabelle, die man mittels des Linkers an die richtige Adresse 
legt.

In der Resetfunktion initialisiert man den Controller, also Taktfrequenz 
einstellen, Speicher nullen, vorinitialisierte Variablen aus dem ROM ins 
RAM kopieren und sowas. Wenn man das alles gemacht hat, springt man in 
seine main-Funktion.

Von dort aus ruft man dann weitere Funktionen auf, mit denen man Sachen 
wie z.B. IO konfiguriert (nach Datenblatt), und dann hat man die übliche 
Endlosschleife, in der das eigentliche Programm dann läuft.

> 3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem
> Mikrocontroller ohne OS?

Ein OS bedeutet Overhead und zusätzliche Komplexität, die zu Fehlern 
führen kann. Gemäß "keep it simple and stupid" vermeidet man das 
solange, wie es nicht notwendig ist.

Ab einer gewissen Komplexität der Anwendung selber, besonders mit 
nebenläufigen Tasks, wird die manuelle Verwaltung aber wiederum so 
fehleranfällig, daß ein reifgetestetes OS die bessere Wahl ist.

> Kommt ein Mikrocontroller wie der STM32 ohne
> Betriebssystem aus, weil über die Libs lediglich die Register
> angesteuert werden

Man kann auch auf einem STM32 mit OS arbeiten. Das wird meistens 
allerdings nicht sowas wie Linux sein, sondern die üblichen kleinen 
Echtzeit-Betriebssysteme.

Obwohl µC-Linux auf STM32 durchaus läuft, aber dazu muß man dann auch 
noch eine externe SD-Karte oder sowas haben sowie externes RAM, in das 
man das Linux lädt, und das bedeutet zusätzliche Bausteine bei mieser 
Performance.

von Dennis (Gast)


Lesenswert?

Beste Dank für die die zahlreichen Antworten. C/C++ kann ich 
Programmieren, nur habe ich mich bisher nie im Detail mit 
Treiberentwicklung oder ähnliches befasst. Denn STM32 finde ich deshalb 
spannend, da dieser sehr viel für sein Geld bietet. Ich könnte 
beispielsweise Werte eines ADCs über die I2C Schnittstelle auslesen und 
über das Display ausgeben, was ich mit einem Arduino zwar auch könnte, 
aber da sind die meisten Libs bereits verfügbar. Beim STM32 würde ich 
gerne versuchen, die Libs mithilfe des Handbuchs zu schreiben, einfach 
um Erfahrung zu sammeln. Meine Frage zum Thema Firmware war allgemein 
darauf bezogen, da unter dem Begriff verschiedene Techniken zu verstehen 
sind. Aber im Prinzip spielt sich die Entwicklung von Libs auf der 
gleichen Ebene ab, wenn ich das richtig verstanden habe. Was ich 
persönlich viel Schwieriger finde, ist das Entwicklern von Treibern 
unter Linux auf Kernelebene ...

von Dennis (Gast)


Lesenswert?

Nop schrieb:
> Es bedeutet, ein Binärfile zu erzeugen, welches man in einen permanenten
> Speicher überträgt. Dadrin ist das komplette Programm nebst den Daten,
> die zur Erstellungszeit mitgegeben wurden.

Vielen Dank für deine ausführliche Antwort. Verfügt der STM32 im 
Auslieferungszustand über eine Firmware? Bibliotheke sind nicht 
vorhanden, daher gehe ich davon aus.

von Nop (Gast)


Lesenswert?

Dennis schrieb:

> Verfügt der STM32 im Auslieferungszustand über eine Firmware?

Jein. Es ist üblicherweise ein Bootloader drauf, der von der zu 
erstellenden Anwendung auch normalerweise nicht überschrieben wird.

Im Speicherbereich der Anwendung selber ist "ab Werk" nichts drauf, aber 
alle mir bekannten Evalboards haben dann noch eine Demo-Software 
eingespielt. Typischerweise blinkt die mit LEDs und so, damit man sieht, 
daß das Board prinzipiell lauffähig ist.

Diese Demo-Anwendung wird man dann mit der eigenen Anwendung 
überschreiben.


Und ja, STM32 zu Fuß zu programmieren ist um Dimensionen einfacher als 
Linuxkernel-Entwicklung.

von Plattetux (Gast)


Lesenswert?

Dennis schrieb:
> Verfügt der STM32 im
> Auslieferungszustand über eine Firmware?

Nein. Welche Aufgabe sollte die Firmware denn auch übernehmen? Die 
Firmware schreibst Du selbst, ggfs unter Zuhilfenahme fremder Libs. Auch 
wenn ein OS zum Einsatz kommen würde, wäre das Bestandteil der Firmware, 
die Du ins Flash übertragen müsstest.

von Dennis (Gast)


Lesenswert?

Also ist eine Firmware im Prinzip die Kombination aus Libs, die eben 
entsprechende Adressen, etc. enthalten, und Funktionen, die entsprechend 
ausgeführt werden ...

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Autor: m.n. (Gast)
>Deine Fragen lassen vermuten, daß Du noch nie etwas mit
>Miktoprozessoren/-controllern zu tun hattest. Sofern kein direkter Zwang
>zu diesem µC besteht oder keine besonders hohe Prozessorleistung
>gefordert wird, fange eine Nummer kleiner an; meinetwegen mit AVR oder
>einem Arduino.

Hmmm, lass mal sehen ...
... sieht gut aus ;-)

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

.. Bild war zu klein ..

von Proddl (Gast)


Lesenswert?

Ja. Eigentlich ist auch der bereits erwähnte Bootloader Teil der 
Firmware. Dass man den beim Einspielen einer neuen Firmware ins Flash 
stehen lässt, ist da eigentlich ein Sonderfall. Abgesehen davon ist es 
eher wie eine komplette "Neuinstallation" von allem.

von Nop (Gast)


Lesenswert?

Proddl schrieb:
> Dass man den beim Einspielen einer neuen Firmware ins Flash
> stehen lässt, ist da eigentlich ein Sonderfall.

Kenne ich als Normalfall, damit man auf jeden Fall noch eine Möglichkeit 
das Gerät noch updaten kann. Nicht immer ist JTAG überhaupt bestückt, 
vor allem nicht bei Seriengeräten. Da wird die Software normalerweise 
per RS232 und den Bootloader eingespielt, so kenne ich das.

Zumal der Bootloader ja auch nicht in dem Speicherbereich sitzt, wo die 
Applikation hinkommt, und der Bootloader wird auch nur ausgeführt, wenn 
zwei IO-Pins entsprechend von außen gesetzt werden.

von Proddl (Gast)


Lesenswert?

Nop schrieb:
> Proddl schrieb:
>> Dass man den beim Einspielen einer neuen Firmware ins Flash
>> stehen lässt, ist da eigentlich ein Sonderfall.
>
> Kenne ich als Normalfall, damit man auf jeden Fall noch eine Möglichkeit
> das Gerät noch updaten kann.

Japp, da habe ich schlecht formuliert. Natürlich lässt man einen 
Bootloader unangetastet da, wo er ist. Und genau das ist was einen 
Bootloader zu einem Sonderfall in der Firmware macht. Es ist aber im 
Allgemeinen nicht so wie bei einem PC, dass man OS und Libs irgendwo ein 
einziges mal installiert und anschließend nur noch sein Programm dazu 
spielt. Der Normalfall ist dass man ein Firmwareimage erstellt, das 
alles (außer dem Bootloader) enthält und das dann ins Flash lädt.

von RAc (Gast)


Lesenswert?

Dennis schrieb:
> Hallo Zusammen,
> ich würde mir gerne als Einstieg in Embedded Systems einen STM32F429
> zulegen. Dazu habe ich ein paar Verständnisfragen.
>
> 1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das
> Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene
> darüber?
>
> 2. Die Webseite
> http://mikrocontroller.bplaced.net/wordpress/?page_id=2736 bietet
> bereits tolle Libs. Das Nutzen dieser Libs ist jedoch reine
> Programmierarbeit bzw. Zugreifen auf fertige Funktionen. Aber wie geht
> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs
> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?
>
> 3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem
> Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne
> Betriebssystem aus, weil über die Libs lediglich die Register
> angesteuert werden und auf einem Mikrocomputer mit OS oft auch ganze
> Softwarepakete entwickelt werden?

Achtung Eigenwerbung:

https://www.amazon.de/Embedded-Controller-Grundlagen-industrielle-Anwendungen/dp/3658148497

Ich denke, dass Du dort eine Menge deiner Fragen beantwortet bekommst. 
Es gibt selbstverständlich auch Andere Bücher zu dem Thema.

von Markus (Gast)


Lesenswert?

Dennis schrieb
>Ich könnte
>beispielsweise Werte eines ADCs über die I2C Schnittstelle auslesen und
>über das Display ausgeben, was ich mit einem Arduino zwar auch könnte,
>aber da sind die meisten Libs bereits verfügbar. Beim STM32 würde ich
>gerne versuchen, die Libs mithilfe des Handbuchs zu schreiben

Im Moment ist die Entwicklung des Arduino-Framworks für die STM32 
Prozessoren voll im Gange.
Experten, die sich gut mit der STM32-Treiberentwicklung auskennen, sind 
dort  willkommen.
Da gibt es schon noch einige offene Baustellen und wer gerne zu etwas 
beitragen will, was dann sehr viele Leute verwenden werden, ist dort gut 
aufgehoben.

von gadfg (Gast)


Lesenswert?

>Was ist der unterschied zwischen einem Mikrocomputer mit OS
>und einem Mikrocontroller ohne OS?
man lässt das OS(RTOS) für den uC ungenutzt, das man umsonst dazu 
bekommt

>Verfügt der STM32 im Auslieferungszustand über eine Firmware?
ein Bootloader ist drin, mehr nicht, wenn man den uC einzeln kauft

>Bibliotheke sind nicht vorhanden, daher gehe ich davon aus.
ST liefert eine kostenlose Bibliothek für den STM32F4xx, als Zip Datei 
ca. 400MB Stand heute

>Beim STM32 würde ich gerne versuchen, die Libs mithilfe
>des Handbuchs zu schreiben
Lieber nicht, dann wirst du nie Land sehen. Starte mal
lieber mit den BSPs von ST

von Nop (Gast)


Lesenswert?

gadfg schrieb:

> Lieber nicht, dann wirst du nie Land sehen.

Kommt drauf an, wo man hin will. Für etwas IO, ADC, DAC, UART, PLL und 
Waitstates usw. braucht man keine Lib.

Soll es allerdings USB werden, sieht das anders aus. Erst recht, wenn 
man auch noch Ethernet will, was wiederum ohne IP-Stack wenig Sinn hat.

von Stefan F. (Gast)


Lesenswert?

Du hast genau die gleichen Anfängerfragen gestellt, die auch ich mir 
gestellt habe. Ich bin sicher, dass meine Notizen für Dich hilfreich 
sein werden: http://stefanfrings.de/stm32/index.html

Meine Notizen beziehen sich auf STM32F1 Controller, allerdings ist der 
Unterschied zu STM32F4 nur gering - zumindest was diese Grundlagen 
angeht.

von m.n. (Gast)


Lesenswert?

Stefan U. schrieb:
> Du hast genau die gleichen Anfängerfragen gestellt, die auch ich mir
> gestellt habe. Ich bin sicher, dass meine Notizen für Dich hilfreich
> sein werden: http://stefanfrings.de/stm32/index.html

Zitat 2. Satz: "Wer noch keine Erfahrung mit Mikrocontrollern hat, dem 
empfehle ich, mit kleineren 8bit Controllern (z.B. Arduino Nano) 
anzufangen."
Volle Zustimmung ;-)

von Dennis (Gast)


Lesenswert?

gadfg schrieb:
> Lieber nicht, dann wirst du nie Land sehen. Starte mal
> lieber mit den BSPs von

Die Bibliotheken schreiben dürfte ja nicht das Problem sein.  Die Header 
Dateien vom hersteller existieren ja bereits.

von Dennis (Gast)


Lesenswert?

gadfg schrieb:
> ST liefert eine kostenlose Bibliothek für den STM32F4xx, als Zip Datei
> ca. 400MB Stand heute

Warum wurde dann auf
http://mikrocontroller.bplaced.net/wordpress/?page_id=2698 die 
Bibliothek neu programmiert, wenn bereits verfügbar?

von holger (Gast)


Lesenswert?

>Warum wurde dann auf
>http://mikrocontroller.bplaced.net/wordpress/?page_id=2698 die
>Bibliothek neu programmiert, wenn bereits verfügbar?

Weil er es so haben wollte wie ER es programmiert hat.
Aber solche Dinge sind einem Dennis natürlich noch fremd.

von Nop (Gast)


Lesenswert?

Dennis schrieb:

> Warum wurde dann auf
> http://mikrocontroller.bplaced.net/wordpress/?page_id=2698 die
> Bibliothek neu programmiert, wenn bereits verfügbar?

Weil die ST-Libs zwar ziemlich generisch sind, aber dafür auch einen 
gewaltigen Overhead beinhalten. Wenn man beispielsweise schnell IO-Pins 
toggeln möchte, ist dieser Overhead einfach zuviel.

Das ist auch kein Wunder, wenn man statt eines Registerzugriffes lieber 
einen Pointer auf ein Struct übergibt und dann mit einer Schleife und 
einem case-switch den Register-Zugriff macht.

Heute bedeutet Software-Entwicklung auf komplexen Plattformen wie PCs 
oder Smartphones im Wesentlichen, daß man bestehende Frameworks mit ein 
bißchen glue logic zusammenpappt. Die Performance ist ausreichend 
(meistens), und das alles selber entwickeln würde zu lange dauern. 
Deswegen fühlt sich allerdings heute auch ein Multicore mit 3 GHz nicht 
schneller an als ein Singlecore mit 1 GHz vor 15 Jahren.

Embedded macht man das oftmals nicht, weil man zum einen nicht die 
Ressourcen hat, und weil man zum anderen mehr optimiert, damit man 
dieselbe Aufgabe mit einem schwächeren und damit billigeren Controller 
hinbekommt.


Und an holger, Dein zweiter Satz war einfach überflüssig.

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.