Hi,
ich habe mir jetzt einmal drei STM32F103C8T6 auf einem BluePill-Board
bestellt.
Dazu hätte ich nun einmal ein paar Fragen:
1. Würdet ihr mir zum Programmieren eher zu einem (universeller
einsetzbaren) USB-to-RS232-Adapter raten oder eher zu einem ST-Link V2?
Und warum?
2. Ich komme von den AVRs, bei denen man ja immer die Register
programmiert. Nun habe ich mich auch einmal schon ein wenig in die
Register eingelesen (Ref. Man.) und glaube, dass ich so langsam auch
durchblicke, was in etwa für was da ist. Allerdings lese ich jetzt fast
immer nur von Leuten, die das CubeMX verwenden, sich da den Startup-Code
zusammenklicken und diesen dann generieren. Daraus entsteht dann Code
mit der HAL-Lib, sehe ich das richtig? Wieder andere benutzen dann
wiederum structs wie GPIO_InitTypeDef und Funktionen wie SystemInit().
Diese sind dann allerdings kein HAL sondern die StdPeriphLib von ST,
oder?
Nachdem ich mir jetzt das alles einmal angesehen habe, frage ich mich
allerdings, wofür man diese ganzen Funktionen braucht. Letztendlich ist
das doch nicht schneller, als wenn man im Datenblatt nachliest, wie die
Register heißen und dann schnell die entsprechenden Bits setzt, oder
nicht? Ich möchte eben auch eigentlich wissen, was ich da mache und
nicht einfach nur irgendeine Funktion aufrufen, die hinter meinem Rücken
alles mögliche macht.
Ist es also entsprechend möglich (und sinnvoll), auch einfach nur mit
den Registern aus stm32f10x.h zu programmieren oder würdet ihr mir
absolut davon abraten? Mir geht es eben vor allem auch um das
Verständnis.
3. Was für ein Flashtool würdet ihr mir empfehlen? Für den St-Link lese
ich eigentlich immer nur das Programm "stlink". Gibt es das auch
GUI-less? Ich habe in den Arch-Repos nur eines mit GUI gefunden und
ansonsten auch nichts. Ich würde das eben gerne einfach in ein
flash-script einbauen.
4. Ich habe in dem CMSIS-Ordner von CubeMX startup-ASM-Code gefunden.
Braucht man den? Wenn ich das richtig sehe, dann wird da eigentlich nur
RCC initalisiert, was ja auch ansonsten mit ein paar Registern erledigt
ist, sodass man nicht extra diese Datei braucht, oder?
Das war es, glaube ich, fürs Erste.
Vielen Dank schon einmal für alle Antworten!
1.) Programme übertragen geht mit beiden gleich gut. Debuggen geht aber
nur mit einem ST-Link.
2.) Sowohl die Cube HAL als auch die StdPeriphLib abstrahieren die
Hardware ein bisschen und "sollen" die Programmierung vereinfachen. Ich
komme jedoch mit direkten Registerzugriffen ebenso zurecht - außer was
beim USB Port. Aber für den hat W.S. hier eine Library veröffentlicht,
die keine der beiden Abstraktions-Libraries benötigt.
3.) An der Kommandozeile kann man openocd benutzen, um die Firmware zu
flashen. Ich habe das allerdings noch nicht ausprobiert.Für den
seriellen Port gibt es außerdem stm32flash, für den ST-Link gibt es das
texane stlink Tool. Beide bei GitHub.
4.) Ja, den startup code braucht man. Vom AVR bist du gewohnt, dass der
gcc diesen automatisch erzeugt und noch vor deine main() Funktion
einfügt. Bei ARM hast du hier die Chance, den Code zu verändern.
Außerdem kannst du hier die Interrupt-Vektoren selbst ausfüllen und
Namen vergeben, während beim AVR die Namen der Interrupthandler hart
vorgegeben sind. Der Startup Code hat die Aufgabe, alles so weit
vorzubereiten, dass dein C Programm ausführbar ist. Also hauptsächlich
die Initialisierung vom Heap, Stack und globale Variablen (kopieren aus
dem Flash).
Schau Dir meine Notizen an: http://stefanfrings.de/stm32/index.html
> frage ich mich> allerdings, wofür man diese ganzen Funktionen braucht. Letztendlich ist> das doch nicht schneller, als wenn man im Datenblatt nachliest, wie die> Register heißen und dann schnell die entsprechenden Bits setzt
Brilliant beobachtet.
alarmdin schrieb:> 1. Würdet ihr mir zum Programmieren eher zu einem (universeller> einsetzbaren) USB-to-RS232-Adapter raten oder eher zu einem ST-Link V2?> Und warum?
Wenn du mehr debuggst als daß du programmierst, dann würde ich dir gar
sehr zu einem JLink raten, ersatzesweise zu einem STLink, besser jedoch
ein zum JLink umgeflashten STLink. Da gibt es ne Software von Segger,
die das bei ausgewählten STLinks kann.
Wenn du jedoch einigermaßen gut bist beim Programmieren, so daß du nicht
jeden Furz per Debugger überprüfen mußt, dann wäre eher der USB zu
seriell Adapter und der eingebaute Bootlader angesagt. Ich hatte hier
auch schon mal ein Brennprogramm
(Beitrag "STM32Fxxx Bootlader Programmer STM32Prog") gepostet, mit dem man
auch eine kleine Konsole per seriell haben kann, was die Kommunikation
mit dem Chip erleichtert.
> 2. Ich komme von den AVRs, bei denen man ja immer die Register> programmiert. Nun habe ich mich auch einmal schon ein wenig in die> Register eingelesen (Ref. Man.) und glaube, dass ich so langsam auch> durchblicke, was in etwa für was da ist. Allerdings lese ich jetzt fast> immer nur von Leuten, die das CubeMX verwenden
Es hat ne Menge Leute gegeben, die die ST-Lib und später Cube ganz toll
finden und strikt bevorzugen. Diese Leute machen hier und anderswo viel
Traffic, eben weil sie den Blick in das Referenzmanual scheuen.
Ich selber halte davon nichts.
Stattdessen halte ich mehr davon, sich an das RefMan zu halten und bei
den eigenen Kreationen ein striktes Regime der Trennung von Low-Level
Treibern und höheren Programmschichten einzuhalten. Sowas schafft
Klarheit und befördert die Portierbarkeit.
Bis man sich klar darüber ist, daß sowas seine Meriten hat, braucht es
so seine Zeit. Ging mir nicht anders. Quellen, die ich vor 10 oder 20
Jahren schrieb, würde ich heute SO niemals wieder schreiben.
W.S.
Die neueren ST-Link sind eigentlich ganz annehmbar.
Die erste Generation war dagegen fürchterlich.
> jeden Furz per Debugger überprüfen mußt
Wenn einem im Referenzmanual etwas unklar ist, kann man die
entsprechenden IO-Register auch per Debugger "bespielen".
Programmieren muss man dazu nichts.
Einen USB-Seriell-Wandler sollte man nebenbei sowieso im Haus haben.
Ein passendes Nucleoboard kann als Referenz auch nicht schaden.
Das bringt auch gleich einen ST-Link mit USB-Seriell-Wandler mit.
Die Chinesen haben da merkwürdige Dinge auf ihren Bords.
Stefanus F. schrieb:> 1.) Programme übertragen geht mit beiden gleich gut. Debuggen geht aber> nur mit einem ST-Link.
Ich habe jetzt erst einmal einen FT232RL bestellt. Wobei die Dinger
sowieso so billig sind, dass das keinen großen Unterschied macht. Sonst
bestelle ich, sobald ich die Debug-Funktion brauche, einfach noch einen
St-Link. Debugger sind zwar oftmals nett, aber man findet üblicherweise
auch so den Fehler.
W.S. schrieb:> ausgewählten STLinks
Woran erkenne ich denn die geeigneten STLinks? Sind das die Originale
oder funktioniert das genauso bei den ganzen Kopien aus China?
Stefanus F. schrieb:> 4.) Ja, den startup code braucht man. Beim AVR bist du gewohnt, dass der> COmpiler diesen automatisch erzeugt und noch vor deine main() Funktion> einfügt. Bei AVR hast du hier die Chance, den Code zu verändern.> Außerdem kannst du hier die Interrupt-Vektoren selbst ausfüllen und> Namen vergeben, während beim AVR die Namen der Interrupthandler hart> vorgegeben sind. Der Startup Code hat die Aufgabe, alles so weit> vorzubereiten, dass dein C Programm ausführbar ist. Also hauptsächlich> die Initialisierung vom Heap, Stack und globale Variablen (kopieren aus> dem Flash).
Okay, das ist tatsächlich gut zu wissen, danke.
Was ich allerdings noch nicht verstehe:
ich brauche ja stm32f10x.h für die ganzen Definitionen. Darin sind
allerdings noch die Abhängigkeiten core_cm3.h und system_stm32f10x.h und
die zugehörigen *.c-files enthalten. Was genau sind das denn für Header?
Brauche ich die wirklich zwingend?
Stefanus F. schrieb:> 3.) An der Kommandozeile kann man openocd benutzen, um die Firmware zu> flashen. Ich habe das allerdings noch nicht ausprobiert.Für den> seriellen Port gibt es außerdem stm32flash, für den ST-Link gibt es das> texane stlink Tool. Beide bei GitHub.
Ich habe mir jetzt einmal noch openocd und stm32flash installiert und
werde einfach einmal alles ausprobieren, sobald der entsprechende
Adapter kommt.
W.S. schrieb:> Ich hatte hier> auch schon mal ein Brennprogramm> (Beitrag "STM32Fxxx Bootlader Programmer STM32Prog") gepostet, mit dem> man> auch eine kleine Konsole per seriell haben kann, was die Kommunikation> mit dem Chip erleichtert.
Wärst du bereit, den Source Code davon zu teilen, damit ich schauen
kann, dass ich das für Linux portiere?
Aber ansonsten werde ich wohl einfach auf die oben genannten Programme
zurückgreifen.
Schlaubischlumpf schrieb:> Die neueren ST-Link sind eigentlich ganz annehmbar.> Die erste Generation war dagegen fürchterlich.>>> jeden Furz per Debugger überprüfen mußt>> Wenn einem im Referenzmanual etwas unklar ist, kann man die> entsprechenden IO-Register auch per Debugger "bespielen".> Programmieren muss man dazu nichts.>> Einen USB-Seriell-Wandler sollte man nebenbei sowieso im Haus haben.>> Ein passendes Nucleoboard kann als Referenz auch nicht schaden.> Das bringt auch gleich einen ST-Link mit USB-Seriell-Wandler mit.>> Die Chinesen haben da merkwürdige Dinge auf ihren Bords.
Der USB-Serial-Adapter ist bereits bestellt. Sonst bestelle ich mir halt
noch einen StLink mit. Aber zumindest beim AVR brauchte ich bisher noch
nie einen Debugger.
Beim Nucleo-Board weiß ich nicht, ob mir das wirklich etwas bringt. Da
ist dann ja auch noch einmal ein anderer µC drauf, womit ich dann immer
mit zwei Ref. Man.s herumhantieren müsste. Ich werde es jetzt erst
einmal so probieren. Vllt. werde ich mir ein solches zulegen, sobald ich
einige Erfahrungen mit ARMs sammeln konnte.
Lies die infos auf meiner Homepage. Die Unterschiede zwischen dem
ST-Link vom Nucleo Board und den billigen Clones aus China habe ich dort
beschrieben. Die CMSIS ist umfangreich weil der STM32 viele Register
hat. Du kannst aber Files weglassen, die für andere STM32 Modelle
gelten. Aber das macht dein Programm nich schlanker. Also würde ich mir
die Mühe sparen.
Der zweite Mikrocontroller auf dem Nucleo Biard ist der ST-Link. Den
kannst du abtrennen und einzeln verwenden. Im Gegensatz zu den billigen
China Clones enthält er zugleich einen USB-Uart Adapter. Kann ich nur
empfehlen. Selbst wenn du den Haupt-Teil des Nucleo boarded weg wirfst,
ist das immer noch eine sehr preisgünstige Sache. Und es wird schnell
geliefert. Die Firma ST hat dazu einen Anazon Account.
alarmdin schrieb:> Der USB-Serial-Adapter ist bereits bestellt. Sonst bestelle ich mir halt> noch einen StLink mit. Aber zumindest beim AVR brauchte ich bisher noch> nie einen Debugger.
Es ist aber nett und viel billiger als für den AVR. Einen ST-Link in der
Bauform eines USB-Sticks verkauft dir der Chinese für €2,50.
> Beim Nucleo-Board weiß ich nicht, ob mir das wirklich etwas bringt. Da> ist dann ja auch noch einmal ein anderer µC drauf
Häh? Es gibt ganz viele verschiedene Nucleo-Boards. Nimm einfach das mit
dem STM32F103RB. Das ist fast der gleiche Chip wie auf dem Bluepill, nur
mit mehr Pins. Ansonsten haben die Nucleos den ST-Link gleich drauf. Und
der läßt sich dann auch zum J-Link umflashen. Das ist im wesentlichen
eine Lizenzfrage. Lies halt mal bei Jegger auf der Website.
Stefanus F. schrieb:> Lies die infos auf meiner Homepage. Die Unterschiede zwischen dem> ST-Link vom Nucleo Board und den billigen Clones aus China habe ich dort> beschrieben. Die CMSIS ist umfangreich weil der STM32 viele Register> hat. Du kannst aber Files weglassen, die für andere STM32 Modelle> gelten. Aber das macht dein Programm nich schlanker. Also würde ich mir> die Mühe sparen.> Der zweite Mikrocontroller auf dem Nucleo Biard ist der ST-Link. Den> kannst du abtrennen und einzeln verwenden. Im Gegensatz zu den billigen> China Clones enthält er zugleich einen USB-Uart Adapter. Kann ich nur> empfehlen. Selbst wenn du den Haupt-Teil des Nucleo boarded weg wirfst,> ist das immer noch eine sehr preisgünstige Sache. Und es wird schnell> geliefert. Die Firma ST hat dazu einen Anazon Account.
Ich kam noch nicht dazu, die gesamte Webpage durchzulesen. Aber scheint
tatsächlich viele nützliche Informationen zu enthalten. Wobei ich nicht
glaube, dass ich den ST-Link abgelötet und dann wieder irgendwo
aufgelötet bekomme.
Aber trotzdem sieht das Board, nach einem zweiten Blick, tatsächlich
sehr attraktiv aus.
Axel S. schrieb:> alarmdin schrieb:>> Der USB-Serial-Adapter ist bereits bestellt. Sonst bestelle ich mir halt>> noch einen StLink mit. Aber zumindest beim AVR brauchte ich bisher noch>> nie einen Debugger.>> Es ist aber nett und viel billiger als für den AVR. Einen ST-Link in der> Bauform eines USB-Sticks verkauft dir der Chinese für €2,50.
Nach ein bisschen Überlegen werde ich mir wohl ein Nucleo-Board zulegen.
Die sind auch billiger als gedacht.
>> Beim Nucleo-Board weiß ich nicht, ob mir das wirklich etwas bringt. Da>> ist dann ja auch noch einmal ein anderer µC drauf>> Häh? Es gibt ganz viele verschiedene Nucleo-Boards. Nimm einfach das mit> dem STM32F103RB. Das ist fast der gleiche Chip wie auf dem Bluepill, nur> mit mehr Pins. Ansonsten haben die Nucleos den ST-Link gleich drauf. Und> der läßt sich dann auch zum J-Link umflashen. Das ist im wesentlichen> eine Lizenzfrage. Lies halt mal bei Jegger auf der Website.
Tatsächlich. Ich dachte immer, dass darauf üblicherweise STM32F4 verbaut
sind. Aber sind wenn dann wohl eher STM32F3. Ich sollte mich nächstes
Mal wohl besser informieren.
Kann man den ST-Link auch umflashen, wenn man den nicht auslötet?
Danke für die Aufklärung!
alarmdin schrieb:> Wobei ich nicht> glaube, dass ich den ST-Link abgelötet und dann wieder irgendwo> aufgelötet bekomme.
Nix löten, einfach "abbrechen". Zumindest bei dem auf Stefanus Seite zu
sehenden Nucleo-F103RB Board ist die Platine entsprechend vorgestanzt.
Der kleinere obere Teil ist der ST-Link, der größere untere das
eigentliche Board.
alarmdin schrieb:> Kann man den ST-Link auch umflashen, wenn man den nicht auslötet?
Der hat einen Bootloader und wird auf dem gleichen Weg (per DFU) zum
J-Link umgeflashed, auf dem sonst ein Update der ST-Link Firmware
passiert. Man kann auch von J-Link wieder zu ST-Link zurück, wenn man
das möchte.
guest schrieb:> Nix löten, einfach "abbrechen".
Man muß den ST-Link nicht abbrechen, um ihn umzuflashen. Man muß ihn
auch nicht abbrechen, um einen externen µC via SWD zu flashen oder zu
debuggen. Einfach die beiden Jumper auf CN2 entfernen und schon sind
ST-Link und der µC auf dem Nucleo-Board elektrisch getrennt (ja ok,
außer GND und Vcc). Und dann kann man beliebige µC an die SWD Pins auf
CN4 anschließen.
> Wobei ich nicht glaube, dass ich den ST-Link abgelötet und dann wieder> irgendwo aufgelötet bekomme.
Schau Dir das Board genau an. Du brauchst dazu nur ein Messer (oder Mut,
einfach über die Tischkante brechen).
> Ich dachte immer, dass darauf üblicherweise STM32F4 verbaut> sind. Aber sind wenn dann wohl eher STM32F3.
Gibt es ab 15€ mit STM32F103.
> Kann man den ST-Link auch umflashen, wenn man den nicht auslötet?
Na klar.
Du solltest wirklich meine Seite lesen, bevor du weitere Fragen stellst,
die dort beantwortet sind.