Forum: PC Hard- und Software VB CMD ausführen für ST Link PRogrammer


von Tuffi (Gast)


Lesenswert?

Hallo, ich nutze STM32 und habe den STLink. Da der Programmer nicht so 
schön wie bei ATmel ist, und man nicht einfach die .elf oder Production 
file auswählen und alles schreiben kann sondern das mit vielen einzelnen 
Schritten geht, habe ich ein VB Programm geschrieben welches das mit der 
stm32_programmer_cli.exe macht und einer CMD line. Das funktioniert auch 
wenn ich das manuell mache und die eingebe flashed er die hex mit eep 
und allen Fuses direkt in einem Rutsch. Super.

So sieht meine CMD line aus:
"C:\Program 
Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\stm32_program 
mer_cli.exe"  -c port=swd -rdu -e all -d "MeinPfad/meinedatei.hex" -v 
--skiperase -ob iwdg_sw=0 rdp=1 bor_lev=12

Jetzt habe ich ein VB Programm wo ich einmal den 
stm32_programmer_cli.exe wähle, einmal den Pfad mit allen Production hex 
angebe und dann listet mir das Programm alle möglichen Baugruppen auf, 
ich kann die gewünschte wählen und auf PRogramm klicken - dann sollte 
die CMD öffnen und der Ablauf starten.

Mein Programm erzeugt den o.g. String welchen ich so manuell in die CMD 
kopieren kann und der passt auch 1:1 auch mit den "..." etc. Daran liegt 
es nicht. Aber in der CMD selber steht dann immer nur:

"C:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden 
werden.  => Das ist strange weil der String den ich übergebe alle Infos 
enthält und nicht nur C:\Programm

Und dann wird unten der Pfad angegeben wo mein VB programm liegt.

So sieht meine VB Funktion aus:
1
Dim ProgArgument As String = ""
2
3
        ProgArgument += ControlChars.Quote + My.Settings.PfadSTlink + ControlChars.Quote
4
        ProgArgument += " -c port=swd -rdu -e all -d "
5
        ProgArgument += ControlChars.Quote + My.Settings.PfadProduction + "\" + ComboBox1.SelectedItem + "\Firmware\bin\" + ComboBox1.SelectedItem + ".hex" + ControlChars.Quote
6
        ProgArgument += " -v --skiperase -ob iwdg_sw=0 rdp=1 bor_lev=12"
7
8
9
        Dim myprocess As New ProcessStartInfo("cmd.exe")
10
        myprocess.Arguments = "/k " + ProgArgument
11
        myprocess.WindowStyle = ProcessWindowStyle.Normal
12
        Process.Start(myprocess)

von pegel (Gast)


Lesenswert?

Ich würde einfach ein Verzeichnis c:\stm32 und stm32_program
mer_cli.exe dahin kopieren oder einen Link erstellen.

von DerEgon (Gast)


Lesenswert?

Tuffi schrieb:
> "C:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden
> werden.  => Das ist strange weil der String den ich übergebe alle Infos
> enthält und nicht nur C:\Programm

Das passiert, wenn die Anführungszeichen, die um Deinen Pfad 
herumgehören, nicht durchgereicht werden.

Gib doch mal den von Dir zusammengebastelten String 
"myprocess.Arguments" irgendwohin aus.

Mit dem Processexplorer könntest Du Dir ansehen, mit welchen Argumenten 
schlussendlich Deine cmd.exe aufgerufen wird.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Du brauchst wahrscheinlich noch mehr Ebenen an Escaping, vielleicht so:
1
cmk.exe /k "\"C:\Program 
2
Files\\STMicroelectronics\\STM32Cube\\STM32CubeProgrammer\\bin\\stm32_program 
3
mer_cli.exe\"  -c port=swd -rdu -e all -d \"MeinPfad/meinedatei.hex" -v 
4
--skiperase -ob iwdg_sw=0 rdp=1 bor_lev=12"

Da ist immer viel Ausprobieren angesagt. Eleganter wäre es den 
stlink-Prozess direkt per CreateProcess zu starten (ohne CMD) und dessen 
Ausgabe in eine TextBox in deinem Programm umzuleiten, so in der Art:

http://www.vb-helper.com/howto_net_run_dos.html

Tuffi schrieb:
> und man nicht einfach die .elf oder Production
> file auswählen und alles schreiben kan

Also im STM32CubeProgrammer kann man problemlos ELF-Files auswählen und 
flashen...

von Schlaumaier (Gast)


Lesenswert?

Tuffi schrieb:

Setzte VOR und HINTER den gesamten Befehl ein CHR(34).  CMD 
ÜBERGABE-Befehle kommt NICHT mit Leerzeichen klar.

Beweis : Rufe die Eigenschaften einen Icon auf. Wenn der Verzeichnisname 
o. der Dateiname Leerzeichen enthält wird der Befehl automatisch in "" 
gesetzt.

Ist ein URaltes Problem.

von c-hater (Gast)


Lesenswert?

Schlaumaier schrieb:

> Setzte VOR und HINTER den gesamten Befehl ein CHR(34).  CMD
> ÜBERGABE-Befehle kommt NICHT mit Leerzeichen klar.

Ja, cmd-Aufrufe erfordern ein sog. "Quoting". Aber das muss man nicht 
zwingend mit Chr(34) tun. VB.net unterstützt auch einen anderen 
Quoting-Mechanismus. Sprich: für ein in's Ziel zu transportierendes 
Double-Quote schreibt man einfach zwei in das String-Literal...

Dieser ganze Quoting-Wahnsinn ist übrigens überhaupt nur der 
historischen Idee zu eines CLI zu verdanken. Moderne Anwendungen 
brauchen sowas nicht und werden auch nicht über CLI aufgerufen.

von Schlaumaier (Gast)


Lesenswert?

c-hater schrieb:
> Dieser ganze Quoting-Wahnsinn ist übrigens überhaupt nur der
> historischen Idee zu eines CLI zu verdanken.

Kann man so sehen.  Ich nenne so was historisch gewachsener Wasserkopf 
den keiner Operieren will, weil das Ergebnis keinen Historiker gefällt 
;)

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.