Forum: Mikrocontroller und Digitale Elektronik STM32 Programm hochladen. Welche Möglichkeiten? Korrekt verstanden?


von Alex (Gast)


Lesenswert?

Hi
in folgendem Thread wurde mir bezüglich des Kaufes eines STM32 toll 
geholfen:
Beitrag "STM32 Blue Pill bei eBay: Original oder Fälschung?"

Gekauft wurde letztendlich dieser:
https://robotdyn.com/stm32f303cct6-256-kb-flash-stm32-arm-cortexr-m4-mini-system-dev-board-3326a9dd-3c19-11e9-910a-901b0ebb3621.html

Vielen Dank dafür. Ich verwende den uC zusammen mit einem ST Link V2 
Clone und kann den uC damit wunderbar programmieren und auch debuggen. 
Im Prinzip habe ich also alles, was ich fürs Hobby Programmieren 
benötige.

Ich bin allerdings neugierig und bräuchte nun ein wenig Hilfe, die 
weiteren Begriffe und Zusammenhänge besser zu verstehen, wie man 
Programme auf den uC laden kann, weil ich Anleitungen und Videos gesehen 
habe, aber den dahinterliegenden Grund nicht verstanden habe (nach dem 
Motto: Warum so umständlich, wenn man auch einen ST Link für das gleiche 
Geld kaufen kann?):

1. Möglichkeit:
Man verwendet einen USB to Serial (FTDI) und kann damit das Programm auf 
den uC draufspielen. Diese Möglichkeit nennt man flashen und wird z.B. 
über USART, I2C, SPI mit dem uC kommuniziert. Man kann nicht debuggen. 
Diese Möglichkeit den Bootloader zu verwenden wird von STM32 von Haus 
aus unterstützt.

2. Möglichkeit:
Auf Youtube habe ich Videos gesehen, dass man mittels FTDI den 
Bootloader umprogrammieren kann, um anschließend Programme direkt 
mittels USB auf den uC zu flashen. Man umgeht also nachfolgend den USB 
to Serial Wandler und verwendet direkt USB. Diese Möglichkeit 
unterstützt ebenfalls KEIN debugging. Man programmiert den uC nicht, 
sondern flashed ihn.

Egal ob Möglichkeit 1 oder 2, man kann immer mittels ST Link V2 den uC 
Programmieren und anschließend auch Debuggen.

Hat man Möglichkeit 2 realisiert, kann man trotzdem anschließend 
Programme mittels FTDI seriell auf den uC laden?

Ist das korrekt zusammengefasst und verstanden?

Fragen über Fragen... :)

Danke und Gruß,

von R. F. (rfr)


Lesenswert?

Guten Morgen.

Flashen ist der Vorgang, der ein Binary in einen Programmspeicher 
schreibt, wenn dieser ein Baustein in Flash-Technologie gefertigt ist.

Das geht sowohl per RS232 als auch per JTAG.

Auch das Umprogrammieren des Bootloadersi st ein Flashprozess. Es ist 
halt nur eine spezielle Software.

Debugging geht nur mit JTAG. Dazu kann man derzeit nur den St-Link 
verwenden. Sicher existieren noch andere Adapter. Die entsprechende 
Artikelseite hier nennt einige Möglichkeiten.

Gruss

Robert

von m.n. (Gast)


Lesenswert?

R. F. schrieb:
> Debugging geht nur mit JTAG. Dazu kann man derzeit nur den St-Link
> verwenden.

Das stimmt doch garnicht!
Debuggen kann man auch mit SWD oder per UART und printf() ...
Es gibt auch Programmierwerkzeuge anderer Anbieter, namentlich Segger.

von Programmierer (Gast)


Lesenswert?

Alex schrieb:
> nach dem Motto: Warum so umständlich, wenn man auch einen ST Link für
> das gleiche Geld kaufen kann?

Manche Leute haben es gerne umständlich. Manche verweigern sich 
gegenüber Debuggern aus quasi-religiösen Gründen ("echte Schotten machen 
keine Fehler und müssen nicht debuggen"). Wer einen Debugger a la 
ST-Link, JLink o.ä. hat kann damit alles machen und kann sich die 
anderen Möglichkeiten sparen. Viele Arten von Fehlern findet man mit 
Debuggern sofort, an denen man sonst ewig suchen kann, weshalb ich immer 
Debugger nutzen würde.

Alex schrieb:
> Hat man Möglichkeit 2 realisiert, kann man trotzdem anschließend
> Programme mittels FTDI seriell auf den uC laden?

Ja, aber die überschreiben dann den USB-Bootloader. Das ganze ist 
übrigens nicht FTDI-spezifisch, es geht mit beliebigen 
USB-Serial-Adaptern.
Die größeren STM32 haben übrigens USB-Bootloader eingebaut, können also 
direkt ab Werk per USB-DFU programmiert werden.

von drm (Gast)


Lesenswert?

ST hat da auch noch eine Meinung zum Flashen der STM32 : AN2606

https://www.st.com/resource/en/application_note/cd00167594-stm32-microcontroller-system-memory-boot-mode-stmicroelectronics.pdf

neben JTAG, SWD, USB, SPI, I2C, CAN ud UART kann man natürlich auch noch 
einen eigenen Bootloader ins Flash schreiben wie z.B. bei Arduino 
üblich.

von Christopher J. (christopher_j23)


Lesenswert?

Es gibt bei den STM32 grundsätzlich zwei Wege wie man sein Binary in den 
Flash-Speicher schreiben kann.

1. über die Debug-Schnittstelle (für gewöhnlich SWD, prinzipiell geht 
auch JTAG)

2. über einen Bootloader

Die Begriffe "flashen" und "programmieren" (manche älteren Semester 
sprechen noch gerne von "brennen") bedeuten dabei das gleiche, egal auf 
welchem Weg man das macht.

Die STM32 haben ab Werk alle mindestens einen UART-Bootloader und viele 
haben darüber hinaus noch andere Bootloader für andere Schnittstellen, 
z.B. USB oder CAN. Diese Bootloader kann man nicht überschreiben. 
Aktivieren kann man sie über die BOOT-Pins, die z.B. auf den 
Bluepill-Boards auf Stiftleisten herausgeführt sind, so dass man die 
mittels Jumper aktivieren kann.

Dein Board von Robotdyn mit dem F303CC kommt von Haus aus mit einem 
USB-Bootloader, während die F103C8 auf den Bluepills diesen nicht haben. 
Da besteht dann die Möglichkeit einen eigenen Bootloader "nachzurüsten". 
Zum Entwickeln sehe ich gegenüber einem Debugger ehrlich gesagt keine 
Vorteile aber im Feld ist ein Firmwareupdate eines Gerätes sicherlich 
einfacher mittels USB, UART oder CAN zu machen, statt irgendwo einen 
Debugger anzuschließen.

von Stefan F. (Gast)


Lesenswert?

Programmierer schrieb:
> Ja, aber die überschreiben dann den USB-Bootloader.

Nein. Der unveränderliche Bootloader des STM32F303 unterstützt UART, USB 
(und bei einigen anderen Modellen auch I²C). Einen selbst geschriebenen 
Bootloader (im Arduino Style) im Flash braucht man da nicht.

Debugging (im Sinne von: Haltepunkte setzen und in die Register gucken) 
geht  über die SWJ Schnitstteelle, die zwei Protokolle Unterstützt: JTAG 
und SWD Wobei man bei JTAG ergänzen sollte, dass das keineswegs so 
standardisiert ist, wie es klingt. JTAG definiert nicht viel mehr, als 
wie man Daten seriell rein und raus schiebt. Wo genau die Daten hin 
müssen und wie sie interpretiert werden, ist wieder bei jedem Hersteller 
anders. Insofern ist die JTAG Schnittelle fast genau so 
Hersteller-Spezifisch wie SWD.

Siehe http://stefanfrings.de/stm32/stm32f3.html#proginterfaces

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für eure Antworten :)

Gruß,

von Programmierer (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nein. Der unveränderliche Bootloader des STM32F303 unterstützt UART, USB
> (und bei einigen anderen Modellen auch I²C). Einen selbst geschriebenen
> Bootloader (im Arduino Style) im Flash braucht man da nicht.

Ich meinte natürlich den selbst gebrannten Bootloader aus der Frage. 
Dass sich dieses selbst brennen bei Modellen mit USB-Bootloader erübrigt 
ist klar.

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.