Forum: Mikrocontroller und Digitale Elektronik Anfang mit STM32. Wie habt ihr es gemacht?


von Felix N. (felix_n888)


Lesenswert?

Hallo Community,
Ich hätte da mal ein paar Fragen zum STM32 und drumherum. Ich habe mir 
letzte Woche ein Nucleo-64 Board bestellt. Auf diesem ist ein 
STM32F446RE Mikrocontroller verbaut.

Ich möchte erstmal ein paar Erfahrungen mit der MCU/STM32 allgemein 
sammeln. Ein konkretes Projekt welches ich jetzt unbedingt mit dem STM32 
umsetzten möchte habe ich nicht.

Bisher habe ich mich die letzten 5 Jahre nur mit den ATMegas und ATTinys 
von Atmel beschäftigt. Was mich besonderes an den STM32 interessiert ist 
der DAC, CAN und die teils hohen Geschwindigkeiten die sich mit SPI 
erreichen lassen.

Als IDE verwende ich die von ST zur Verfügung gestellte STM32CubeMX IDE. 
Die graphische Konfigurationsoberfläche ist ganz nett, aber auf Dauer 
könnte ich mich damit glaubig nicht anfreunden. Das mich die Software 
dann zwingt in vorgegeben Bereichen mein Code zuschreiben, naja ist 
nicht so meins.

Mal eine Frage an alle die von AVR/PIC auf STM32 umgestiegen sind oder 
beides machen. Wie habt ihr euch in den STM32 "eingearbeitet"? Gibt es 
da gute Tutorial deutsch/englisch, ist mir beides recht, oder Bücher? 
Habe auch hier im Forum diverse Beiträge als auch Artikel durchgelesen 
zum STM32 aber irgendwie habe ich nicht so richtig das passende 
gefunden. Habe mir auch von ST das STM32CubeF4 Packet runtergeladen da 
sind ja ein Haufen an Beispielcodes drin. Aber zum Beispiel diesen 
Interrupt Handler raff ich irgendwie gar nicht trotz Codebeispiel.

Die Datenblätter habe ich mir schonmal in Ruhe angeschaut. Sind doch 
sehr komplex, aber gut dafür kann der STM auch viel. Was ich ein 
bisschen vermisse sind die Codebeispiele wie bei den AVR Datenblätter.

Eine andere Frage die ich habe wäre die HAL Library. Da scheinen sich ja 
irgendwie so ein bisschen die Geister zu trennen. Die einen Nutzen es 
nur, die anderen nicht und manche machen beides. Verwendet ihr die HAL 
Library? Oder sprecht ihr die Register direkt an?

Was mir wohl direkt aufgefallen ist das ein simples Blink Programm was 
nur eine LED ein und ausschalte mit 1000ms Delay braucht schon viel 
Speicher (~11kB Flash) ohne HAL ist es deutlich weniger (~2kB) naja die 
MCU hat ja 512kB da sollte das jetzt nicht die größte Rolle spielen. Bei 
180MHz auf den die CPU rennt machen wahrscheinlich ein paar Takte mehr 
oder weniger für eine Operation auch kein so großen Unterschied mehr.

Hab beides ausprobiert. Diese Strukturen mit GPIOTypdef... etc.. 
gefallen mir ganz gut. Die LED die auf den Nucleo Board verbaut ist ein 
und auszuschalten war mit der HAL Library kein Problem, auch beim 
versuch die Register direkt zu nehmen hat es zwar ein bisschen länger 
gedauert bis ich die Register der GPIOs verstanden habe, und bis ich mal 
die Clock von GPIOA eingeschaltet bekomme habe ... , aber am Ende hat 
auch das funktioniert.

Jedoch sah das beim USART schon wieder anderes aus da bin ich mit den 
Register gescheitert genauer gesagt die Baudrate festzulegen.

Mfg

Beitrag #6752407 wurde vom Autor gelöscht.
von beo bachta (Gast)


Lesenswert?

Felix N. schrieb:
> Jedoch sah das beim USART schon wieder anderes aus da bin ich mit den
> Register gescheitert genauer gesagt die Baudrate festzulegen.

Bist ja schon recht weit vorgedrungen.

Mein Rat: verwende CubeMX, auf Dauer ist das schneller und besser,
und generiere deinen Code nicht auf HAL-Basis sondern auf LL-Basis.
Das ist einstellbar, nur nicht so offensichtlich dass es einem
gleich ins Auge sticht (LL --> Low Level Driver).

Alles was du an Register-Manipulationen machen möchtest kannst
du entweder mit LL-Calls durchführen oder in den LL-Libs
"spionieren" wie man auf die Register zugreift und selbst Code
daraus ableiten. So kommst du z.B. auch leicht zum eigenen
UART-Driver.

von Johannes S. (Gast)


Lesenswert?

Für ein kleines sparsames Blinky würde ich einen 555 in SMD nehmen.
Bei Ethernet, SDC, Grafikdisplays, USB, RTOS fängt der Spaß mit Cortex-M 
an.  Und sogar ein OS kann man sich da leisten.

von Kevin M. (arduinolover)


Lesenswert?

Felix N. schrieb:
> Das mich die Software
> dann zwingt in vorgegeben Bereichen mein Code zuschreiben, naja ist
> nicht so meins.

Tut sie nicht, mein Code ist absolut getrennt von dem was CubeMX 
generiert. Die meisten Handler und callbacks sind weak definiert und du 
kannst sie bei dir einfach neu definieren und ansonsten muss ich in der 
main.c nur zwei Funktionen bei mir einbinden und das ist persistent, 
wenn man es an die richtige Stelle schreibt.

Was die Nutzung von Cube/HAL angeht schließe ich mich dem Vorredner an. 
In meinem Fall habe ich es mit recht vielen verschiedenen Serien von ST 
zu tun, da will man nicht immer alles von 0 an machen. Und ganz ehrlich 
was den Overhead angeht ist der für die meisten Leute egal, weil die µC 
schnell genug sind und der höhere Speicherverbraucht ist auch egal, die 
haben mehr als genug. Die Zeiten von Atmega 8-bittern mit null Speicher 
ist vorbei....

Auch wenn hier einige harneckige User existieren, die nicht einsehen 
wollen, das es gerade im Hobby Bereich absolut egal ist und man einfach 
einen entsprechend µC mit viel Speicher kaufen kann. Die arbeiten aber 
vermutlich auch noch mit 10GB HDDs.

von Felix N. (felix_n888)


Lesenswert?

beo bachta schrieb:
> Mein Rat: verwende CubeMX, auf Dauer ist das schneller und besser,
> und generiere deinen Code nicht auf HAL-Basis sondern auf LL-Basis.
> Das ist einstellbar, nur nicht so offensichtlich dass es einem
> gleich ins Auge sticht (LL --> Low Level Driver).

Hallo!
Mit CubeMX meinst du jetzt den graphischen Konfigurator für Pins oder 
so? Ich habe mal gerade nachgeschaut ich kann es unter Advanced zwischen 
HAL und LL umschalten. Schaue ich mir mal genauer an. Lässt du den Code 
zB. für SPI von CubeMX generieren also SPIX auswählen Full-Duplex Master 
oder schreibst du dir das selber?

beo bachta schrieb:
> So kommst du z.B. auch leicht zum eigenen
> UART-Driver.

Ah ok. Ja ich habe bei meinem Versuch am Ende etwas gemogelt. Habe in 
der entsprechenden HAL Datei die Baudkalkulation rausgesucht und sie mit 
automatisch Generierter Baudrate ausgeben lassen hab den Wert dann ins 
Register geladen und dann tat der USART nach "Register" auch wie von HAL 
generiert.

Kevin M. schrieb:
> Tut sie nicht, mein Code ist absolut getrennt von dem was CubeMX
> generiert. Die meisten Handler und callbacks sind weak definiert und du
> kannst sie bei dir einfach neu definieren und ansonsten muss ich in der
> main.c nur zwei Funktionen bei mir einbinden und das ist persistent,
> wenn man es an die richtige Stelle schreibt.

Am Anfang wusste ich das nicht hab mein Code nicht in USER CODE BEGIN 
und END geschrieben. Code generiert. Alles was ich gemacht habe war weg. 
Hat mich in dem Moment schon etwas aufgeregt. Das meinte ich die 
Software zwingt mich zwischen USER CODE BEGIN .. END zuschreiben. Oder 
meinen wir beide jetzt unterschiedliche Dinge?

Kevin M. schrieb:
> Und ganz ehrlich
> was den Overhead angeht ist der für die meisten Leute egal, weil die µC
> schnell genug sind und der höhere Speicherverbraucht ist auch egal, die
> haben mehr als genug.

Hatte ich ja auch geschrieben das es bei 512Kbytes an Flash und 
128kBytes an RAM nicht so wirklich drauf ankommt.

Kevin M. schrieb:
> Die Zeiten von Atmega 8-bittern mit null Speicher
> ist vorbei....

Bis jetzt passte immer irgendwie alles drauf, mein Blick ging irgendwie 
immer als erstes nach dem Kompilieren auf den Speicherverbrauch. Mein 
größtes Projekt bis jetzt ist mein Aquarium Steuergerät läuft auf einem 
ATMega2560 mit externen 56kB SRAM. Dort sind im Moment 123kBytes an 
Flash und 5kB an RAM belegt(Heap etwa 3-4kB).

Mfg

von beo bachta (Gast)


Lesenswert?

Felix N. schrieb:
> Lässt du den Code
> zB. für SPI von CubeMX generieren also SPIX auswählen Full-Duplex Master
> oder schreibst du dir das selber?

Wenn man das einmal selbst gemacht hat fällt es einem sehr leicht
das für andere (STM-) Controller umzuschreiben oder gleich ohne
Änderungen weiterzuverwenden. Also ja, so etwas stricke ich mir
selber und gewinne ein paar Taktzyklen dabei, wenn auch nicht
viel. Denn viele LL-Calls werden "ge-inlined" oder vom Compiler
so optimiert als wären sie Inline-Code. Dagegen bin ich aber
so "faul" und nutze die vergleichweise komfortablen LL-Calls
zur Initialisierung von Peripherie. Dabei lohnt es sich nicht
selbst zu optimieren.

von Kevin M. (arduinolover)


Lesenswert?

Felix N. schrieb:
> Das meinte ich die
> Software zwingt mich zwischen USER CODE BEGIN .. END zuschreiben. Oder
> meinen wir beide jetzt unterschiedliche Dinge?

Ja irgendwie muss der Code Generator ja wohl erkennen was er 
überschreiben kann und was nicht. Wenn du deinen Code aber sinnvoll 
aufbaust hast du alles von dir geschriebene in seperaten dateien und 
musst zwischen USER CODE BEGIN .. END nur deine Loop und Main einfügen.

von Harry L. (mysth)


Angehängte Dateien:

Lesenswert?

Felix N. schrieb:
> Ich habe mir
> letzte Woche ein Nucleo-64 Board bestellt. Auf diesem ist ein
> STM32F446RE Mikrocontroller verbaut.

Gute Wahl für den Einstieg!

Felix N. schrieb:
> Als IDE verwende ich die von ST zur Verfügung gestellte STM32CubeMX IDE.
> Die graphische Konfigurationsoberfläche ist ganz nett, aber auf Dauer
> könnte ich mich damit glaubig nicht anfreunden. Das mich die Software
> dann zwingt in vorgegeben Bereichen mein Code zuschreiben, naja ist
> nicht so meins.

Dazu zwingt dich niemand!
Du kannst deinen Code problemlos in eigene .c und .h-Files schreiben.
Der generierte Code nimmt dir einfach sehr viel Arbeit für die 
Initialisierung ab (aber auch nicht mehr!), und das ist gut so!

Felix N. schrieb:
> Was ich ein
> bisschen vermisse sind die Codebeispiele wie bei den AVR Datenblätter.

Es gibt in den HAL-Sourcen u.A. jede Menge Beispiele, und es gibt die 
Application-Notes.

Außerdem findet man von ST auf YT jede Menge Education-Videos zu dem 
Thema.

Felix N. schrieb:
> Mal eine Frage an alle die von AVR/PIC auf STM32 umgestiegen sind oder
> beides machen. Wie habt ihr euch in den STM32 "eingearbeitet"?

Genau so, wie du!
CubeMX ist eine enorme Hilfe für den Einstieg, aber das generiert 
nicht deine Anwendung, sondern nur die immer wiederkehrenden 
Initialisierungs-Funktionen.
Wenn du die Peripherie effektiv nutzen und verstehen willst, musst du 
trotzdem Datenblätter und AppNotes studieren.
Ich würde auf CubeMX nur sehr ungern verzichten,

Felix N. schrieb:
> Aber zum Beispiel diesen
> Interrupt Handler raff ich irgendwie gar nicht trotz Codebeispiel.

Gerade das wird durch die diversen Callbak-Funktionen enorm erleichtert.

Felix N. schrieb:
> Was mir wohl direkt aufgefallen ist das ein simples Blink Programm was
> nur eine LED ein und ausschalte mit 1000ms Delay braucht schon viel
> Speicher (~11kB Flash) ohne HAL ist es deutlich weniger (~2kB)

Ja und?
Sobald u etwas mehr als ein Bliky schreibst, wirst du diesen Code so 
oder so brauchen.

Felix N. schrieb:
> auch beim
> versuch die Register direkt zu nehmen hat es zwar ein bisschen länger
> gedauert bis ich die Register der GPIOs verstanden habe, und bis ich mal
> die Clock von GPIOA eingeschaltet bekomme habe ... , aber am Ende hat
> auch das funktioniert.

Und warum tust du dir das an?
Das sind "wiederkehrende Aufgaben", die CubeMX dir auf nahezu perfekte 
Weise abnimmt, und der Overhead durch die HAL-Funktionen ist in den 
allermeisten Fällen vernachlässigbar.
Klar, enthält auch CubeMX noch einzelne Fehler, aber inzw. hat HAL eine 
"Reife" erreicht mit der man bereits sehr gut leben kann.

Würdest du das selber schreiben, wären da ganz sicher sehr viel mehr 
Fehler drin.

Felix N. schrieb:
> Jedoch sah das beim USART schon wieder anderes aus da bin ich mit den
> Register gescheitert genauer gesagt die Baudrate festzulegen.

Dafür gilt das genauso.
Über huartx.Instance->xxx kannst du direkt auf die Register zugreifen 
(obwohl das im Fall der Baudrate vollkommen unnötig ist, so lange du die 
nicht im laufenden Betrieb ändern willst)

Ich häng dir mal nen Code für UART mit HAL an, der auch einige 
Interrupt-Callbacks enthält.

Alles kein Hexenwerk!

: Bearbeitet durch User
von Felix N. (felix_n888)


Lesenswert?

beo bachta schrieb:
> Also ja, so etwas stricke ich mir
> selber und gewinne ein paar Taktzyklen dabei, wenn auch nicht
> viel. Denn viele LL-Calls werden "ge-inlined" oder vom Compiler
> so optimiert als wären sie Inline-Code.

Muss sagen der Unterschied zwischen HAL und LL ist mir noch nicht 
wirklich klar geworden. Ich habe in CubeMX mal von HAL auf LL gestellt 
und den Code neu erstellen lassen die Funktionsaufrufe heißen nun 
anderes und benötigten Teilweise auch Argumente wo HAL keine Benötigt 
hat.

Kevin M. schrieb:
> Wenn du deinen Code aber sinnvoll
> aufbaust hast du alles von dir geschriebene in seperaten dateien und
> musst zwischen USER CODE BEGIN .. END nur deine Loop und Main einfügen.

Harry L. schrieb:
> Du kannst deinen Code problemlos in eigene .c und .h-Files schreiben.

Ah ihr meint das also so das es dann einmal die "normal" main.c/h wo 
auch die richtige main(void) drin steht gibt. Und ich erstelle mir dann 
meine c/h Dateien zB. system.c/h und dort gibt mache ich mir so zusagen 
eine zweite "main" auf wo ich dann alles reinschreibe Initialisiere 
etc.. Und dann nur einmal kurz in der richtigen main die beiden 
Funktionen aufrufe? Sprich
1
//STM Stuff
2
//User begin
3
my_initStuff();
4
//User end
5
6
while(1) ..
7
//User begin
8
myLoopStuf();
9
//User end

Harry L. schrieb:
> Es gibt in den HAL-Sourcen u.A. jede Menge Beispiele, und es gibt die
> Application-Notes.

Meinst du das "Description of STM32F4 HAL and low-layer drivers" 
Dokument? Mit so knapp 2100 Seiten?

Harry L. schrieb:
> Und warum tust du dir das an?

Ich wollte es nur ausprobieren ob es so auch geht. Bis jetzt bin ich das 
gewohnt. Ins Datenblatt reinzuschauen welches Register das ist und 
welche Bits gesetzt werden müssen. Bzw. zum Teil kenne ich manche 
Register auch schon auswendig für die ATMegas.

Und zumal habe ich irgendwo, in einem anderen Forum, gelesen das man die 
Register NICHT direkt ansprechen soll weil HAL noch irgendwie? eine Art 
Fehlerbehandlung drin hat, konnte des bzgl. aber nix finden. Außer die 
Statuscodes die HAL zurück gibt, zB beim init von Strukturen.

Harry L. schrieb:
> Wenn du die Peripherie effektiv nutzen und verstehen willst, musst du
> trotzdem Datenblätter und AppNotes studieren

Ja das ist klar. ST bietet ja einige Datenblätter an für den Controller. 
So wie ich das sehe brauche ich aber nur 2 Daten einmal das 
Spezifikationsdatenblatt wo Pinout und Blockdiagramm drin stehen und 
einmal das Reference Datenblatt wo die ganzen Register beschrieben sind. 
Zusätzlich dann noch die Dokumentation zu HAL.

Harry L. schrieb:
> Dafür gilt das genauso.
> Über huartx.Instance->xxx kannst du direkt auf die Register zugreifen

Ah okay. Gut zu wissen.

Harry L. schrieb:
> Ich häng dir mal nen Code für UART mit HAL an, der auch einige
> Interrupt-Callbacks enthält.

Cool. Erstmal danke dafür! Habs mir mal heute Nacht grob angeschaut. 
Muss gestehen so auf den ersten Blick verstehe ich nicht wirklich was da 
ab geht. Dieses FIFO ist mir fremd scheint aber wenn ich das noch 
richtig im Sinne habe was mit den DMA Controller zutun haben?

Mfg

von Alex -. (alex796)


Lesenswert?

Ich bin der Meinung, dass man am Anfang versuchen sollte, die Peripherie 
selbst mittels bare metal zu initialisieren. Der Grund dafür ist, dass 
man ein wesentlich besseres Verständnis für den STM32 bekommt, wie die 
jeweilige Peripherie funktioniert und welche Bits in welche Register was 
bewirken. Felix hat es ja bereits selbst erlebt, dass er bei der 
Initialisierung eines GPIOs bereits ein wenig ins Schwitzen gekommen 
ist. Und das ist gut so, denn es ist im ersten Moment nicht trivial, 
bedarf ein gründliches Durchlesen des Datenblatts/Ref Manuals und man 
bekommt ein gutes Verständnis für die IDE und die Debugfunktion.

WENN man das verstanden hat, kann man für spätere Anwendungen dann HAL 
oder LL verwenden (ich selbst tendiere eher für LL), um das Rad nicht 
immer wieder neu erfinden zu müssen.

Ich selbst bin ebenfalls in den Anfängen mit dem STM32 und schreibe 
ausschließlich bare metal. Es hat mich letztens 6 Stunden gekostet, den 
DAC mit DMA zum Laufen zu bringen. Die Frustration in den 6 Stunden war 
groß, das Erfolgserlebnis und die Freude nach 6 Stunden war aber größer 
:)

Für den Einstieg in bare metal empfehle ich einen Kurs auf Udemy, der 
wirklich gut ins Details geht (es gibt dort oft Angebote, wo der Kurs ca 
10Eur kostet):
https://www.udemy.com/course/mastering-microcontroller-with-peripheral-driver-development/

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


Lesenswert?

Als ich den kleinen STM32F100 auf dem DiscoveryVL bekommen habe, gab es 
HAL noch nicht und ich habe deswegen mit SPL und CMSIS geschrieben. Das 
war nun auch nicht so schlimm.
Allerdings hatte ich ein konkretes Projekt, das schon auf AVR8 und XMega 
lief und habe das auf den F100 portiert. Das war sicher eine gute 
Schule.

von m.n. (Gast)


Angehängte Dateien:

Lesenswert?

Felix N. schrieb:
> Harry L. schrieb:
>> Ich häng dir mal nen Code für UART mit HAL an, der auch einige
>> Interrupt-Callbacks enthält.
>
> Cool. Erstmal danke dafür! Habs mir mal heute Nacht grob angeschaut.
> Muss gestehen so auf den ersten Blick verstehe ich nicht wirklich was da
> ab geht.

Mir geht es genauso.
Direkt programmiert (und hinreichend kommentiert) hat man mehr 
Transparenz und weniger Geschwätzigkeit. Wie Du siehst (Beispiel für 
USART2 beim G431 im Anhang), ist die Baudrate supersimpel einzustellen.

Für den Einstieg finde ich es angenehm, per CubeMX den Takt zu 
konfigurieren. Mehr nicht! Das HAL-Zeugs kann man ignorieren.
Von main() aus geht es zu den eigenen Routinen, die die Register direkt 
ansprechen.

Als IDE für den Einstieg empfehle ich die Demoversion EWARM von IAR. Das 
Projekt wird direkt von CubeMX erstellt.
Mit der IDE läßt sich sehr gut auch auf Registerebene debuggen. Während 
das Programm läuft, kann man Portpins aktivieren, Timer umkonfigurieren, 
sehen was in RX-Puffern steht, wie die DMA-Flags aussehen und ggf. 
triggern, ...
Mit 32 kB Code kommt man schon recht weit und kann die Peripherie gut 
antesten. Für größere Projekte kann man auf eine andere, kostenlose IDE 
umsteigen. Da sind die Geschmäcker sehr unterscheidlich.

von Harry L. (mysth)


Lesenswert?

Felix N. schrieb:
> Muss sagen der Unterschied zwischen HAL und LL ist mir noch nicht
> wirklich klar geworden.

LL spart in erster Linie Platz für sehr kleine MCUs, und geht auf Kosten 
der Portierbarkeit.
So lange du das nicht wirklich brauchst laß erst einmal die Finger 
davon!

Felix N. schrieb:
> Und dann nur einmal kurz in der richtigen main die beiden
> Funktionen aufrufe? Sprich
> //STM Stuff
> //User begin
> my_initStuff();
> //User end
> while(1) ..
> //User begin
> myLoopStuf();
> //User end

Genau so!

Felix N. schrieb:
> Harry L. schrieb:
>> Es gibt in den HAL-Sourcen u.A. jede Menge Beispiele, und es gibt die
>> Application-Notes.
>
> Meinst du das "Description of STM32F4 HAL and low-layer drivers"
> Dokument? Mit so knapp 2100 Seiten?

Jain.
Cube MX hat ja für dich bereits die erforderlichen HAL-Sourcen für 
deine MCU heruntergeladen, und in dem Source-Tree auf deiner 
Festplatte befinden sich bereits auch Beispielprojekte.

Felix N. schrieb:
> auf den ersten Blick verstehe ich nicht wirklich was da
> ab geht. Dieses FIFO ist

Das Konzept eines FiFo sollte schon bekannt sein, und das ist vollkommen 
Architektur-unabhängig.
Der Code in fifo.c/.h hat rein gar nichts mit HAL zu tun und würde 1:1 
so auch auf einem AVR laufen.

Der interessante Teil steckt in serial.c/.h

Felix N. schrieb:
> wenn ich das noch
> richtig im Sinne habe was mit den DMA Controller zutun haben?

Bei asynchroner Übertragung (UART) macht ein DMA in den seltensten 
Fällen Sinn.
Als Anfänger solltest du die DMAs erst einmal beiseite lassen.

Was ich dir dringend empfehle ist dieses Dokument:
https://www.st.com/resource/en/user_manual/dm00105879-description-of-stm32f4-hal-and-ll-drivers-stmicroelectronics.pdf

Ja, das ist sehr groß, aber das ist wichtig zum Nachschlagen, und nicht 
um das linear zu lesen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Felix N. schrieb:
> Wie habt ihr es gemacht?

Ich habe meine Anfänge dort dokumentiert: 
http://stefanfrings.de/stm32/index.html

> Verwendet ihr die HAL Library?

Selten, die ist mir nicht geheuer. Der Code ist für mich nur schwer 
nachvollziehbar und manchmal fehlerhaft.

Die Hal kann aber dabei hilfreich sein, wiederverwendbaren Code zu 
schreiben. Für meine wenigen Hobbyprojekte ist das relativ 
uninteressant. Wenn ich etwas wiederverwende, dann eher Treiber für 
externe Hardware wie z.B. Displays. Dafür brauche ich keine HAL.

von Stefan F. (Gast)


Lesenswert?

Felix N. schrieb:
> Als IDE verwende ich die von ST zur Verfügung gestellte STM32CubeMX IDE.

Und zum Essen benutze ich einen Göffel.

Spaß beiseite. Du hast da zwei Begriffe zusammen gemixt:

  * STM32CubeIDE 
(https://www.st.com/en/development-tools/stm32cubeide.html)
  * STM32CubeMX 
(https://www.st.com/en/development-tools/stm32cubemx.html)

Wobei die Cube IDE das Cube MX inzwischen beinhaltet. Deswegen heißt sie 
aber nicht STM32CubeMXIDE - obwohl der name passend wäre.

von Felix N. (felix_n888)


Angehängte Dateien:

Lesenswert?

Alex -. schrieb:
> Ich bin der Meinung, dass man am Anfang versuchen sollte, die Peripherie
> selbst mittels bare metal zu initialisieren.

Also die Register direkt ansprechen ohne HAL/LL? Oder was muss ich unter 
"Bare Metal" verstehen?

Harry L. schrieb:
> So lange du das nicht wirklich brauchst laß erst einmal die Finger
> davon!

Okay.

Harry L. schrieb:
> Das Konzept eines FiFo sollte schon bekannt sein

First In First Out. Warteschlagenprinzip. Kenne ich schon. Hatte ich im 
Datenblatt bei dem STM32 in Kombination mit den DMA Controller in Form 
als "Stream" gesehen(Siehe Anhang). Daher fiel mir das direkt ein.

Harry L. schrieb:
> Als Anfänger solltest du die DMAs erst einmal beiseite lassen.

Hatte ich auch vor.

Harry L. schrieb:
> Ja, das ist sehr groß, aber das ist wichtig zum Nachschlagen, und nicht
> um das linear zu lesen.

Ja genau dieses Dokument habe ich mit den 2100 Seiten gemeint. Das habe 
ich schon auf meiner Platte.

Stefan ⛄ F. schrieb:
> Ich habe meine Anfänge dort dokumentiert:
> http://stefanfrings.de/stm32/index.html

Ah interessant. Werde ich mir mal anschauen. Danke. Du hast jetzt das 
ganze für den F3 CPU gemacht. Lässt sich das vom Grundprinzip auch auf 
den F4 CPU anwenden?

Mfg

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


Lesenswert?

Felix N. schrieb:
> Lässt sich das vom Grundprinzip auch auf
> den F4 CPU anwenden?

Selbstverständlich. Allerdings schadet es sicher nicht, RM0090 (die 
Hardware Referenz für die F4) dabei zu haben.
Für die Alternate Function Pins ist auch das Datenblatt zum speziellen 
Chip nützlich.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Felix N. schrieb:
>> Ich bin der Meinung, dass man am Anfang versuchen sollte, die Peripherie
>> selbst mittels bare metal zu initialisieren.

> Also die Register direkt ansprechen ohne HAL/LL?

Ja, das bedeutet der Begriff. Würde ich auch für den Anfang empfehlen. 
Man versteht danach viel besser, was die HAL eigentlich macht und welche 
Fähigkeiten/Einschränkungen der Chip hast.

von Stefan F. (Gast)


Lesenswert?

Felix N. schrieb:
> Lässt sich das vom Grundprinzip auch auf den F4 CPU anwenden?

Jede F-Serie ist in Details anders. Ich befürchte, dass der F4 dem F1 
ähnlicher sein könnte als dem F3 weil die F3 Serie neuer ist. Aber das 
fragen wir besser mal die Experten die den F4 wirklich kennen.

Wer weiß es genauer?

Die USB Implementerung auf meiner Homepage funktioniert auf dem F4 
jedenfalls nicht, das weiß ich mit Sicherheit.

von Johannes S. (Gast)


Lesenswert?

naja, einige Dinge sind nicht unbedingt intuitiv, wie ADC über Timer 
triggern. Dafür gibt es aber auch einige gute App Notes und YT Videos 
von ST oder anderen.
Das Schema mit HAL ist einfacher, es wird üblicherweise immer eine 
Struktur mit den gewünschen Einstellungen gefüllt und dann an eine 
Funktion übergeben. Diese kümmert sich dann darum das alles nötige und 
in der richtigen Reihenfolge gesetzt wird. Bei LL muss man sich selber 
zusammensuchen, ist wie geschrieben wurde etwas sparsamer weil der 
Zwischenschritt über die Struktur entfällt, aber nicht gerade 
leserlicher.
ARM CM Code ist erstmal grösser, das hat viele Gründe: längere 
Instruktionen durch grösseren Adressraum, grosse Interrupt Vector table, 
C/C++ Library newlib ist umfangreicher, die Peripherie ist komplexer und 
möchte erst Clock und Power konfiguriert haben und sicher noch einige 
Gründe mehr. Dafür kann man mit den CM aber auch große und komplexe 
Systeme bauen.
Und CubeMX ist nicht nur zum Code generieren, es fängt schon mit der 
Auswahl eines µC über die parametrische Suche an. Dann kann man damit 
sehr schön die Resourcen planen um die Pins möglichst vorteilhaft auf 
die Platine zu bekommen. Die komplexe Takteinstellung eines H7 möchte 
man auch nicht zu Fuss machen. Der Strombedarf des Controllers und die 
Batterielaufzeit wird berechnet wenn gewünscht. Cube generiert dazu auf 
Knopfdruck eine schöne Doku mit dieser Konfiguration. Dazu kann man noch 
PlugIns installieren für weitere komplexe Aufgaben. Und das meiste für 
Nüsse. Da man nörgeln wie man will, ich keinen anderen Hersteller der 
sowas bietet und auch wenn da noch der eine oder Fehler drin ist, es 
wird trotzdem auch massig professionell eingesetzt. Wenn man nicht 1 
Projekt in 3 Jahren hat sondern 3 dicke Brocken in 1 Jahr, dann ist das 
eine sehr große Hilfe.

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


Lesenswert?

Stefan ⛄ F. schrieb:
> Die USB Implementerung auf meiner Homepage funktioniert auf dem F4
> jedenfalls nicht, das weiß ich mit Sicherheit.

Der F4 hat auch oft mehrere USB Engines, die alle ihre Eigenarten haben. 
Es hat hier etwas gedauert, aber ich habe auf dem F429 dann beide USB 
Ports zum laufen gekriegt, der eine macht ein CDC Device und der andere 
einen MSC Host. War schon ein wenig Tipperei, läuft aber problemlos 
gleichzeitig.

Wie gesagt, gibt es zwischen BareMetal und HAL ja auch beliebige 
Abstufungen. SPL und CMSIS ist nur eine davon und bei mir im Moment die 
bevorzugte.

von W.S. (Gast)


Lesenswert?

Felix N. schrieb:
> Ich möchte erstmal ein paar Erfahrungen mit der MCU/STM32 allgemein
> sammeln. Ein konkretes Projekt welches ich jetzt unbedingt mit dem STM32
> umsetzten möchte habe ich nicht.

Dann lies einfach das Referenzmanual und das Datenblatt zum Chip und die 
Manuals zum CPU-Typ von Arm. Das reicht für's erste.
Anschließend kannst du deine Erfahrungen sammeln beim Installieren und 
Ausprobieren von Toolchains (Arm/Keil, IAR, GCC)
Der dritte Schritt ist dann das Programmieren einer Firmware in den 
chipinternen Flash. Entweder per Bootlader oder per JTAG/SWD.

W.S.

von Lutz S. (lutzs)


Lesenswert?

Ich würde für die ersten Schritte auch Bare Metal Programmierung 
empfehlen. So versteht man die Zusammenhänge, was man alles 
initialisieren muss damit der Chip erst einmal grundlegende Funktionen 
ausführt. Neben dem was Stefan auf seiner Webseite erklärt habe ich mir 
hier 2 oder 3 Kurse zu verschiedenen Themen (jeder war unter 10 Dollar) 
gebucht, der erklärt wie man sich die benötigten Informationen aus dem 
Datasheet und dem Referenz Manual herausholt und zu Fuß die 
entsprechenden Bits in den Registern setzt. Das hat meinem Verständnis 
sehr geholfen:

https://study.embeddedexpert.io/

Initialisierungen mache ich heute über CubeMX (geht schneller und man 
sieht Abhängigkeiten), aber ich weiss nun im allgemeinen was dort 
passiert.

von Felix N. (felix_n888)


Lesenswert?

Guten Abend und nochmal Hallo an alle,

Ich wollte mich noch mal zum Abschluss zum Wort melden. Erstmal vielen 
lieben dank an euch allen für die nützlichen Tipps rund um den STM32.

In der Zwischenzeit war ich auch nicht ganz untätig und habe mein erstes 
kleines STM32 Programm auf Register Basis fertig gestellt, es ist zwar 
nicht sonderlich nützlich aber es reicht zum Üben. Es ist ein 8 Bit 
Binärzähler welcher den aktuellen Wert einer 8 Bit Variable auf 8 LEDs 
ausgibt. Mit einem Poti und dem ADC kann man die Zählgeschwindigkeit 
einstellen. Und mit einem Taster kann man den Zähler anhalten und wieder 
starten(Ohne Interrupt).

Mittlerweile habe ich die GPIOs den USART und den ADC in Betrieb nehmen 
können. Bei dem ADC wäre ich gestern fast verzweifelt weil er einfach 
nicht laufen wollte und die Anwendung ewig gehangen hat um auf das Ende 
der Messung zu warten.

Bis ich dann irgendwann festgestellt habe, mit einem Beispielcode aus 
dem Internet das ich versehentlich den ADC1 versucht habe im AHB2ENR 
Register zu aktivieren anstatt im APB2ENR Register **kopfschüttel**. 
Danach funktionierte auch er.

Ich habe auf YouTube ein Youtuber gefunden der mehrere Tutorials über 
den STM32 gemacht hat/macht ohne HAL auf Registerbasis. Ich verlinke ihn 
hier mal vielleicht gibt es ja irgendwann noch jemand der an meiner 
Stelle ist und eventuell sowas sucht. Die Videos sind auf Englisch. Er 
erklärt alles auch am Datenblatt was gesetzt werden muss und so weiter 
mit anschließen testen des Programms.

https://www.youtube.com/channel/UCkdqtSMnhYuMsJkyHOxiPZQ

Praktischerweise nutzt er auch das Nucleo-64 F446RE Board mit dem 
STM32F446RE wie ich.

Zum Abschluss hätte ich nochmal eine Frage was den ADC und die 
Referenzspannung angeht:

Der STM32F446RE hat ja internen Temperatursensor an ADC1 Kanal 18. Im 
Datenblatt ist beschrieben wie man in aktiviert und ausließt. Ich habe 
das versucht und das hat auch geklappt. Nur glaube ich das die 
Referenzspannung des ADCs zu hoch ist.

Wenn ich in Auslese bekomme ich bei einer 12 Bit Auflösung ein Wert von 
um die 940. Wenn ich das bei 3,3V in eine Spannung umwandele bekomme ich 
etwa um die 0,757V(757mV).

Laut Datenblatt liegt die Ausgegeben Spannung bei 25 °C bei 
0,76V(760mV). Ich habe etwa 25,8°C in meiner Bude. Passt in etwa. Nur 
wenn ich den Chip kalt mache mit Kältespray auf -10°C dann ändert sich 
der ADC Wert schon auf 898. Wenn ich mein Finger draufhalte etwa auf 
945.

Und da der Sensor laut Datenblatt ja ein Slope von 25mV je Grad hat 
ändert sich die Spannung ja nur minimal pro Grad. Nur lässt sich das 
ganze kaum wirklich umrechnen da der Unterschied so gering ist.

Ich konnte nix finden wie beim AVR das man den ADC bei 1,1V oder 2,56V 
Referenzspannung betrieben wird. Wenn ich das richtig verstanden habe 
ist VREF=VDDA? Also müsste ich um den Sensor auszulesen die Spannung 
extern ändern?

Mfg

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


Lesenswert?

Ein extra Pin für AREF ist beim STM32 gehäuseabhängig. Kleine Gehäuse 
bieten meist nur AREF=VDDA, grössere Gehäuse haben einen Pin für AREF. 
Dazu brauchst du das technische Datenblatt deiner Chipausführung.

von Felix N. (felix_n888)


Lesenswert?

Matthias S. schrieb:
> Dazu brauchst du das technische Datenblatt deiner Chipausführung.

Im Pinout des Chips steht drin:
Pin 12: VSSA/VREF-
Pin 13: VDDA/VREF+

Also hat der STM32 kein intern erzeugte Referenzspannung wie beim AVR?

Mfg

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Felix N. schrieb:
> Also hat der STM32 kein intern erzeugte Referenzspannung wie beim AVR?

Doch manche haben einen Vrefint.
Der ist aber nur an einen ADC Eingang schaltbar zum Nachmessen.
(Durchaus etwas gewöhnungsbedürftig wenn man aus der AVR Ecke kommt)

Siehe F446 RefMan Seite 356 Figure 69. Single ADC block diagram

von m.n. (Gast)


Lesenswert?

Felix N. schrieb:
> In der Zwischenzeit war ich auch nicht ganz untätig und habe mein erstes
> kleines STM32 Programm auf Register Basis fertig gestellt, es ist zwar
> nicht sonderlich nützlich aber es reicht zum Üben.

Ich finde es gut, daß Du Dir die Register näher ansiehst.
Zwar für einen anderen Controller (F3) aber doch sinnvolle Beispiele, 
wie man die Peripherie ansprechen kann: http://www.pomad.fr/node/17
Einfach mal durchblättern und inspirieren lassen.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Der Umstieg von AVR nach STM32 ist ja auch ein Umstieg nach Cortex-M. 
Deshalb sollte man sich auch mit der Cortex-M Architektur vertraut 
machen. Ein paar Sachen sind zumindest nicht ganz intuitiv, 
https://wiki.segger.com/Arm_Cortex-M_interrupts.
Dazu gibt es viele gute Sachen im Netz, ich persönlich empfehle aber die 
Bücher von Joseph Yiu, "The definitive guide to arm cortex processors".

Falls Interesse besteht könnte ich evtl. auch mal Abends so eine Mini 
Schulung per Discord oder ähnliches anbieten. Da könnte man sich über so 
ein paar Cortex-M Sachen unterhalten. Ist jetzt nur eine spontane Idee.

von m.n. (Gast)


Lesenswert?

Til S. schrieb:
> ich persönlich empfehle aber die
> Bücher von Joseph Yiu, "The definitive guide to arm cortex processors".

Ohne dieses Buch (am besten in Papierform) geht eigentlich garnichts ;-)

von Stefan F. (Gast)


Lesenswert?

Til S. schrieb:
> Deshalb sollte man sich auch mit der Cortex-M Architektur vertraut
> machen.

Guter Hinweis.

Leider ist es für einen Anfänger schwer, die Grenzen zwischen Cortex-M 
und dem STM "Aufsatz" zu erkennen, insbesondere weil Cortex-M viele 
Details als "herstellerspezifisch" offen lässt bzw. mehrere Varianten 
anbietet.

Zudem kann man sich nicht mit einem Cortex-M vertraut machen, ohne sich 
gleichzeitig mit den Eigenarten der ST Architektur auseinander setzen zu 
müssen.

Das fiel zumindest mir anfangs schwer.

von Felix N. (felix_n888)


Lesenswert?

Mw E. schrieb:
> Doch manche haben einen Vrefint.
> Der ist aber nur an einen ADC Eingang schaltbar zum Nachmessen.

Hallo,

Ja das habe ich wohl im Datenblatt gesehen. Der ADC Kanal für VRefInt 
wird mit dem Temperatursensor aktiviert.

Mw E. schrieb:
> (Durchaus etwas gewöhnungsbedürftig wenn man aus der AVR Ecke kommt)

Was genau muss ich darunter verstehen. Wenn ich die Interne 
Referenzspannung nur messen kann aber nicht wirklich verwenden wozu ist 
sie dann da? Kalibrierung des ADCs über Temperatur? Genauigkeit?

m.n. schrieb:
> Einfach mal durchblättern und inspirieren lassen.

Werde ich mir anschauen. Danke! :)

Til S. schrieb:
> Der Umstieg von AVR nach STM32 ist ja auch ein Umstieg nach Cortex-M.

Ich habe mir das alles deutlich schlimmer vorgestellt. Und habe lange 
Zeit bevor ich mir das Board geholt überlegt ob ich mich wirklich mit 
dem STM32 auseinander setzten will. Aber jetzt es geht eigentlich, 
dachte der Einstieg wäre eine einzige Katastrophe .

Die C Programmierung ist und bleibt ja die gleiche. Klar die Register 
heißen anderes sind von den Bits breiter. Manchmal komisch Beschrieben 
im Datenblatt. Aber sonst, ging es bisher eigentlich.

Und bisher habe ich im bei den AVR Chips nur I2C, SPI, ADC, USART, 
Interrupts, Timer sowie PWM genutzt. Das meiste habe ich jetzt schon auf 
dem STM32 ans laufen bekommen. Klar der STM32 hat natürlich noch vieles 
mehr als meine AVRs wie DMA, CAN, I2S etc... wenn ich es mal brauche ist 
es auf jeden fall da.

Til S. schrieb:
> Dazu gibt es viele gute Sachen im Netz, ich persönlich empfehle aber die
> Bücher von Joseph Yiu, "The definitive guide to arm cortex processors"

Ah ok. Schaue ich mir mal an ob das was für mich ist.

Stefan ⛄ F. schrieb:
> Leider ist es für einen Anfänger schwer, die Grenzen zwischen Cortex-M
> und dem STM "Aufsatz" zu erkennen, insbesondere weil Cortex-M viele
> Details als "herstellerspezifisch" offen lässt bzw. mehrere Varianten
> anbietet.

Ich frag jetzt einfach mal so doof. Cortex M4 ist doch nur der Prozessor 
des Mikrocontrollers oder? Alles anderes kann man doch als Peripherie 
bezeichnen oder nicht? Also ganz grob gesagt Cortex M4 kommt von ARM der 
Reset ist ST?

Weiß jemand zufällig wo man solche ST Controller beziehen kann? Der 
STM32F446RE welcher ja jetzt auch auf den Nuleco-64 Board verbaut ist, 
ist weder bei reichelt noch conrad erhältlich. Wenn ich mal irgendwann 
ein Projekt mit einem STM32 uC mache wäre das dann meine erste Wahl da 
ich dann mit dem schon erste Erfahrungen habe.

Mfg

von Stefan F. (Gast)


Lesenswert?

Felix N. schrieb:
> Cortex M4 ist doch nur der Prozessor
> des Mikrocontrollers oder?

Ich denke, dazu gehört auch der Interrupt-Controller und die Debugging 
Einheit.

> Also ganz grob gesagt Cortex M4 kommt von ARM der Reset ist ST?

Bei USB ist mir aufgefallen, dass ST diesen Block wiederum von einer 
anderen Firma dazu gekauft hat. Es würde mich nicht wundern, wenn der 
ganze Chip aus Blöcken anderer Hersteller zusammen gestoppelt ist. So 
wirkt er nämlich auf mich, egal auf welche konkrete L oder F-Serie man 
da nun schaut.

> Weiß jemand zufällig wo man solche ST Controller beziehen kann?

Fast alle Modelle sind seit Monaten überall ausverkauft. Zur Zeit hat 
man gar nicht die Freiheit, den am besten passenden Controller zu 
wählen, sondern man muss nehmen was man kriegen kann - koste er was er 
wolle.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Felix N. schrieb:
> Als IDE verwende ich die von ST zur Verfügung gestellte STM32CubeMX IDE.
> Die graphische Konfigurationsoberfläche ist ganz nett, aber auf Dauer
> könnte ich mich damit glaubig nicht anfreunden. Das mich die Software
> dann zwingt in vorgegeben Bereichen mein Code zuschreiben, naja ist
> nicht so meins.

Muss man nicht machen ... STM32CubeMX ist ganz nett, um ein Framework zu 
erzeugen, aber dann muss man sich nicht an die Bereiche halten, wenn man 
nicht vor hat, peripherietechnisch etwas zu ändern und das Framework neu 
über das bestehende zu erzeugen.

Ich lösch den kram immer alles raus.

Mittlerweile hab ich mich halbwegs mit HAL angefreundet, weil ich eher 
Pragmatiker als Idealist bin und es naja schon funktioniert.

Als IDE benutze ich aber die IDE von STMicro nicht mehr - bzw hab ich 
noch nie. Erst lange Zeit Eclipse mit GnuARM-Plugin (Die IDE von STMicro 
ist quasi das gleiche), jetzt einfach Visual Studio Code.

Bei beidem funktionierte Debuggen wunderbar, vscode erscheint mir aber 
schlanker.

: Bearbeitet durch User
von Michael F. (Firma: IAR Systems) (michael_iar)


Lesenswert?

Felix N. schrieb:
> Weiß jemand zufällig wo man solche ST Controller beziehen kann? Der
> STM32F446RE welcher ja jetzt auch auf den Nuleco-64 Board verbaut ist,
> ist weder bei reichelt noch conrad erhältlich.

Wie Stefan F. bereits geschrieben hat ist die Verfügbarkeit der STM32 
aktuell eine "Herausforderung", prinzipiell gibt es aber die Kekse (auch 
für Privatpersonen und in Kleinmengen) z.B. bei Digikey oder Mouser:

https://www.digikey.de/
https://www.mouser.de/

Gruß,
Michael

von Johannes S. (Gast)


Lesenswert?

Bei tme.eu bekommt man die z.B. auch. Es gibt soviel Varianten der STM32 
da wird man eher bei den Distributoren fündig. Einige ‚Standardtypen‘ 
wie F407 findet man auch bei AliExpress.

von m.n. (Gast)


Lesenswert?

Michael F. schrieb:
> prinzipiell gibt es aber die Kekse

Es sind nur noch Krümel ;-)
@TO
Wenn Du beim F446 bleiben möchtest, ist es derzeit geschickt, ein 
komplettes Nucleo-Board zu verwenden. Die sind noch verfügbar und auch 
für Grobmotoriker gut zu bestücken. Notfalls lötet man sich den Chip 
herunter.

Ansonsten gibt es so viele andere Controller von ganz klein und schnell 
(STM32G431, TQFP32, 170 MHz, FPU) und ganz groß und ganz schnell (H7xx, 
550 MHz, DFPU), daß Du je nach Anwendung eine bessere Auswahl treffen 
solltest.
Für mich wäre der F446 im TQFP64 weder Baum noch Borke.

Johannes S. schrieb:
> Einige ‚Standardtypen‘
> wie F407 findet man auch bei AliExpress.

Oder auch hier: 
https://lcsc.com/products/ST-Microelectronics_474.html?q=stm32f407 zu 
einem völlig überzogenem Preis.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Felix N. schrieb:
> Ich frag jetzt einfach mal so doof. Cortex M4 ist doch nur der Prozessor
> des Mikrocontrollers oder? Alles anderes kann man doch als Peripherie
> bezeichnen oder nicht? Also ganz grob gesagt Cortex M4 kommt von ARM der
> Reset ist ST?

Im Prinzip ja. Der gesamte Core inkl. Interrupt Controller, FPU, MPU, 
Debug Logik, etc. kommt von ARM und die Chiphersteller packen dann ihre 
Peripherie und Speicher dazu. Jetzt sind noch viele Core Features 
"implementation defined", d.h. ein paar Eigenschaften kann der 
Chiphersteller noch konfigurieren, z.B. ob eine FPU drin ist oder nicht. 
Aber natürlich keine Regel ohne Ausnahme. Es gibt dann doch wieder 
Device bei denen z.B. nicht die ARM MPU implementiert ist sondern der 
Chiphersteller stattdessen was eigenes reinpackt (wieso auch immer). So 
zum Beispiel beim NXP K66.

Bei ARM7/ARM9 war es noch so das der Interrupt Controller nicht von ARM 
kam und jeder Chiphersteller sich was eigenes ausdenken musste.

Aus z.B. RTOS Sicht ist Cortex-M super weil ein RTOS Core und Compiler 
spezifisch ist. D.h. wenn man ein RTOS für Cortex-M hat läuft das im 
Prinzip auf jedem Cortex-M unabhängig vom Chiphersteller.

von M. Н. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bei USB ist mir aufgefallen, dass ST diesen Block wiederum von einer
> anderen Firma dazu gekauft hat. Es würde mich nicht wundern, wenn der
> ganze Chip aus Blöcken anderer Hersteller zusammen gestoppelt ist. So
> wirkt er nämlich auf mich, egal auf welche konkrete L oder F-Serie man
> da nun schaut.

Da ist so ziemlich alles verbastelt.
Da sind ganz viele Synopsis IPs drin (USB etc.) Der CAN FD Kern bei den 
großen STMs ist ein Bosch M_CAN usw. Das ist absolut gängige Praxis bei 
jedem Hersteller.

Felix N. schrieb:
> Was genau muss ich darunter verstehen. Wenn ich die Interne
> Referenzspannung nur messen kann aber nicht wirklich verwenden wozu ist
> sie dann da? Kalibrierung des ADCs über Temperatur? Genauigkeit?

Du kannst die interne Referenz messen und dadurch rückrechnen, wie groß 
deine VREF des ADCs ist. Damit kannst du dann wieder deine anderen 
Kanäle nachrechnen.

Die interne Referenz des STMs ist aber nicht so der Burner. Bzw. der ADC 
ist eigentlich ziemlich gut, wird aber durch die Referenz recht stark 
verhunzt.
Wenn man eine gute externe Referenz nutzt (vorausgesetzt, der VREF-Pin 
ist vorhanden), dann lassen sich sehr gute Ergebnisse und auch 
Rausch-Performance mit dem ADC erreichen.

von Cyblord -. (cyblord)


Lesenswert?

Anfangen mit STM32? Ich habe mir das nackteste Breakoutboard mit STM32 
geholt, einen ST-Link Programmer und dann habe ich mit Datenblatt und 
GNU Toolchain losgelegt. Da ist doch nichts dabei.

von W.S. (Gast)


Lesenswert?

Cyblord -. schrieb:
> Anfangen mit STM32? Ich habe mir das nackteste Breakoutboard mit STM32
> geholt,...

Ja, so geht es. Immerhin heißt die Überschrift "Anfang mit STM32" und 
nicht "Mit welcher IDE spielt es sich am schönsten".

Mir geht es regelmäßig gegen den Strich, wenn ich hier so etwas 
ähnliches lesen muß wie "Ich will mit µC annfangen, welche IDE muß ich 
mir herunterladen?" - die Leute behaupten, sich mit einem µC befassen zu 
wollen und meinen, sich zuvörderst mit einem PC-Programm befassen zu 
wollen.

W.S.

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> die Leute behaupten, sich mit einem µC befassen zu
> wollen und meinen, sich zuvörderst mit einem PC-Programm befassen zu
> wollen.

Und wenn sie dann man ein Build Script benutzen sollen, fangen sie schon 
an zu meckern.

von Cyblord -. (cyblord)


Lesenswert?

Allerdings kann man für STM32 auch einfach STM32 Workbench nutzen. Da 
hat man Eclipse, GNU Tools und trotzdem ist alles schon eingerichtet. 
StdPeriph und HAL lädt das Ding bei Bedarf auch gleich.
Diese Hürde ist wirklich nicht hoch.

Das Problem ist nicht der STM32 sondern die Leute die schon mit AVR und 
PIC niemals richtig angefangen haben. Die nur mit BASCOM oder Arduino 
konditioniert sind jetzt plötzlich auf STM32 umsteigen wollen. Da fehlt 
diese Vorgehensweise völlig.

Eigentlich müssten die mit einem AVR nochmal ganz von vorne anfangen.

: Bearbeitet durch User
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.