Forum: Mikrocontroller und Digitale Elektronik STM32CubeMX und OpenSTM (System Workbench)


von Dennis X. (Gast)


Lesenswert?

Hallo zusammen,
ich versuche gerade mein erstes Projekt mit CubeMX und OpenSTM32 
Workbench zu flashen. Das ganze geht über das Terminal Programm JLinkExe 
(unter Linux).

/workspace-openstm/F7-Display/ $ JLinkExe -if JTAG -device STM32F746ZG
SEGGER J-Link Commander V5.12d (Compiled Apr 26 2016 19:23:38)
DLL version V5.12d, compiled Apr 26 2016 19:23:34

Connecting to J-Link via USB...O.K.
Firmware: J-Link V9 compiled Mar 29 2016 18:46:37
Hardware version: V9.30
S/N: 269301940
License(s): FlashBP, GDB
OEM: SEGGER-EDU
VTref = 3.288V

Type "connect" to establish a target connection, '?' for help
J-Link>connect
Device position in JTAG chain (IRPre,DRPre) <Default>: -1,-1 => 
Auto-detect
JTAGConf>
Specify target interface speed [kHz]. <Default>: 4000 kHz
Speed>
Device "STM32F746ZG" selected.


TotalIRLen = 9, IRPrint = 0x0011
TotalIRLen = 9, IRPrint = 0x0011
Found Cortex-M7 r0p1, Little endian.
FPUnit: 8 code (BP) slots and 0 literal slots
CoreSight components:
ROMTbl 0 @ E00FD000
ROMTbl 0 [0]: 00001000, CID: B105100D, PID: 000BB4C8 ROM Table
ROMTbl 1 @ E00FE000
ROMTbl 1 [0]: 00001000, CID: B105100D, PID: 000BB4C7 ROM Table
ROMTbl 2 @ E00FF000
ROMTbl 2 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS
ROMTbl 2 [1]: FFF02000, CID: B105E00D, PID: 000BB002 DWT
ROMTbl 2 [2]: FFF03000, CID: B105E00D, PID: 000BB00E FPB
ROMTbl 2 [3]: FFF01000, CID: B105E00D, PID: 000BB001 ITM
ROMTbl 1 [1]: FFF43000, CID: B105900D, PID: 000BB975 ETM-M7
ROMTbl 0 [1]: FFF43000, CID: B105900D, PID: 000BB9A9 TPIU-M7
Cache: Separate I- and D-cache.
I-Cache L1: 4 KB, 64 Sets, 32 Bytes/Line, 2-Way
D-Cache L1: 4 KB, 32 Sets, 32 Bytes/Line, 4-Way
Found 2 JTAG devices, Total IRLen = 9:
 #0 Id: 0x5BA00477, IRLen: 04, IRPrint: 0x1, CoreSight JTAG-DP (ARM)
 #1 Id: 0x06449041, IRLen: 05, Unknown device
Cortex-M7 identified.
J-Link>loadbin /home/dennis/workspace-openstm/Test/Debug/Test.bin 0
Downloading file 
[/home/dennis/workspace-openstm/Test/Debug/Test.bin]...O.K.

Das sieht doch eigentlich so aus als ob er das alles richtig in den 
Flash schreibt oder übersehe ich was? Ein einfaches Testprogramm nach 
dem generierten Code von CubeMX ist folgendes Programm:
1
HAL_Delay(100);
2
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_2);
3
HAL_Delay(100);
4
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_3);
5
HAL_Delay(100);
6
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);

Hab ich irgendetwas übersehen bei der Arbeit mit CubeMX und OpenSTM?
Wäre um jede Idee dankbar!

von tf1973 (Gast)


Lesenswert?

Die Takte stimmen auch? Vor allem ist die Clocksource richtig gesetzt? 
Uebersieht man manchmal...


Thomas

von Dennis X. (Gast)


Lesenswert?

Also im QubeMX bin ich auf Bypass und HSE ist auf 25MHz gesetzt. Der 
Oszillator schwingt auch genau mit dieser Frequenz. Dachte auch erst ich 
hab hier was falsch eingestellt, aber das sollte dann doch so passen 
oder? Mich hat es etwas verwundert, dass er selbst bei Oszillator die 
beiden Pins grün markiert hat, aber das ist ja nur Darstellung.

von hp-freund (Gast)


Lesenswert?

Habe keine Ahnung von J-Link, aber bist Du sicher das loadbin durch 
Angabe der 0 weiß das es eigentlich auf 0x08000000 schreiben soll?

von Dennis X. (Gast)


Lesenswert?

hp-freund schrieb:
> Habe keine Ahnung von J-Link, aber bist Du sicher das loadbin durch
> Angabe der 0 weiß das es eigentlich auf 0x08000000 schreiben soll?

Okay, ja da hätte ich auch selbst drauf kommen können :(

J-Link>loadbin 
/home/dennis/workspace-openstm/F7-Display/SW4STM32/F7-Display/Debug/F7-D 
isplay.bin  0x08000000
Downloading file 
[/home/dennis/workspace-openstm/F7-Display/SW4STM32/F7-Display/Debug/F7- 
Display.bin]...Comparing  flash   [100%] Done.
Erasing flash     [100%] Done.
Programming flash [100%] Done.
Verifying flash   [100%] Done.
J-Link: Flash download: Flash programming performed for 1 range (32768 
bytes)
J-Link: Flash download: Total time needed: 0.813s (Prepare: 0.065s, 
Compare: 0.010s, Erase: 0.378s, Program: 0.341s, Verify: 0.000s, 
Restore: 0.016s)
O.K.
J-Link>

Jetzt schreibt er zumindest mal offensichtlich in den Flash. Aber 
blinken tut bei mir immer noch nichts.
Ich erzeuge den Code als SW4STM32 Projekt und importiere ihn dann in 
OpenSTM32. Das hatte ich mal irgendwo gelesen und er kann nach dem 
einfügen den Code einwandfrei compilieren. Irgendwo fehlt leider noch 
was :(

Kommando zurück: Die SD-Karte einmal neu mit FAT16 bespielen, sodass der 
Controller sich nicht mehr in der Initialisierung aufhängt (Vermutung) 
hat geholfen. Jetzt läuft alles nach Plan. Flashen auf die Adresse 
0x08000000 und das erzeugte Projekt als SW4STM32 in OpenSTM32 
importieren und alles läuft!

von hp-freund (Gast)


Lesenswert?

Hast Du die Ausgänge auch initialisiert?

von hp-freund (Gast)


Lesenswert?

Ups. Die Änderung zu spät gesehen.

Hat sich dann ja erledigt...

von Dennis X. (Gast)


Angehängte Dateien:

Lesenswert?

Also so langsam glaub ich es waren, wie doch so oft, mehrere Fehler auf 
einmal. Die SD-Karte war auf jeden Fall nicht formatiert / zerstört.
Dann sollte über JLinkExe immer ein Reset durchgeführt werden. Dieser 
passiert nicht automatisch, sondern muss extra eingeleitet werden. Und 
ja Flash ab Adresse 0x08000000 kommt noch dazu.
Initialisiert wird ja alles über CubeMX generierten Code.

Edit:
Hier mal angehängt noch ein paar Zeilen wie man ganz bequem über ein 
j-link einfach seinen Controller flasht. Unter Linux getestet und 
funktioniert einwandfrei. Ggf. an das eigene Projekt anpassen.

Danke nochmal!

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.