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.
:
Bearbeitet durch User
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.