Morgen zusammen, nachdem ich vor einem Jahr angefangen habe mich mit den ARM Cortex-M Microcontrollern zu beschäftigen, habe ich am Samstag nun zum ersten mal ein Programm (Blink Led) auf den STM32F3Discovery programmiert/geflasht. Ich hab den STM32F3 mit einen externen STlink-V3 verbunden und mit der Software "STM32CubeProgrammer" programmiert/geflasht. Ich hab den ProgrammCounter auf 0x8000000 gesetzt und Run geklickt. Die Led blinkte wie geplant, ich habe die Verbindung getrennt und den STlink-V3 von Board getrennt. Nach dem ich es eine weile bestaunt hatte, habe ich die den Reset Button geklickt und die Led blinkte nicht mehr. Also habe ich alles wieder angeschlossen und mit der Software wieder verbunden. Ich hab den ProgrammCounter wieder auf 0x8000000 und Run geklickt, es lief wieder. Und wieder dasselbe nach einem Reset/Strom Trennung ist es ganz still. Und das ist jetzt der aktuelle Status. Weitere Informationen (auch unwichtige Infos sind dabei): --------------------- Vor einem Jahr habe ich angefangen ein eigenen Compiler zu Programmieren. Ich hatte dann noch den Assembler geschrieben, ein Debugger mit einen Simulator, welcher die Register und Arbeitsspeicher simuliert und ich habe getestet und getestet. Mein erstes Programm in meiner Programmiersprache lief auf einen AVR Atmega328p. Nach dem das alles geklappt hatte wollte ich es auf den ARM Cortex-M Microcontrollern ausprobieren, nach Wochen mit den Dokumentationen hatte ich dann auch angefangen mein Compiler für die ARM Microcontrollern umzubauen. Vor ca. 1 Woche kam dann meine Pakete mit den Controllern an :) und ich habe direkt Donnerstag und Freitag Urlaub genommen. Am Samstag war es dann soweit und ich hab mein erstes Programm auf ein STM32 programmiert/geflasht. Und die Freude war um so größer das die ganzen mühen eine LED zum blinken gebracht haben :D Und jetzt sind wir beim Problem. Er braucht jetzt immer eine Starthilfe. Ich muss mit der Software verbinden und den ProgrammCounter auf 0x8000000 setzen und Run klicken damit mein Programm läuft. In der Befürchtung das mein Compiler schuld hat habe ich eins in Assembler geschrieben und mit ARM-GCC compiliert ... selbes Ergebniss. Ich hab das auch noch an 2 weiteren STM32F401 ausprobiert ... selbes Ergebniss. Beim ersten habe ich es nochmal meinen Compiler probiert und beim zweiten nur mit ARM-GCC ... aber kein unterschied. Ein paar mal habe ich beim Flashen den haken in der Software angewählt "Run after programming" dann kommt eine Warn Box hoch mit "Core is locked up". Ein bisschen bin ich leider verzweifelt... Es funktioniert sowohl als auch nicht. Hier ist einmal die Assembler Datei welche ich mit ARM-GCC übersetzt habe, welche meine LED an Port PA2 zum blinken bringt: Der Sprunkpunkt "Wait_InSeconds_1" wurde von meinen Compiler generiert und ich diese Funktion einfach mal hier in die Assembler Datei mit verwendet. https://github.com/Robinterra/blinkledYamaSTM32/blob/master/asm/program.S Ich vermute einfach das mir noch wissen fehlt oder so... Vlt habe ich vor lauter lesen der Dokus auch einfach was übersehen und finde es nicht, daher ist mir jede Hilfe recht auch wenn diese erstmal nochmal die Grundlagen zu den ARM Cortex-M befasst. Vielen Dank :)
Robin D. schrieb: > STM32F3Discovery Robin D. schrieb: > mit einen externen STlink-V3 verbunden Wozu? Hast Du dabei wenigstens den internen STlink-V2 getrennt? Oder gekillt?
Wozu? Da ich keine Erfahrung hatte wie der STlink angeschlossen wird... an welche Pins etc... In der Dokumentation (Theorie) ist das eine Sache, aber bevor ich den an meine STM32F401 anschließe wollte ich es einmal am Board ausprobiert haben. Und mir fehlt ein USB-Mini Kabel -.- aber das ist mir auch erst aufgefallen als ich das Board ohne STlink-V3 mit dem PC verbinden wollte Hast Du dabei wenigstens den internen STlink-V2 getrennt? Ja. Ich habe ihn getrennt. Da ich heute wieder auf der Arbeit bin, habe ich Zugang zu einem USB-Mini Kabel und kann danach auch den STlink-V2 verwenden.
:
Bearbeitet durch User
Robin D. schrieb: > Ich hab den ProgrammCounter auf 0x8000000 gesetzt Das macht keinen Sinn. An dieser Stelle steht der initiale Stack-Pointer. Den kann man nicht ausführen. Danach kommt die ISR-Tabelle. Das Layout davon ist von der Hardware vorgegeben. Erst danach kommt der Programmcode. Es muss also im Flash an der Stelle 0x8000000 der initiale Stack-Pointer stehen, an 0x8000004 die Adresse des Reset-Handler, dann die weiteren ISR-Adressen, dann der Code dieser Funktionen. Die Adressen in der ISR-Tabelle müssen alle das niedrigste Bit gesetzt haben, damit der Core sie als Thumb-Code erkennt.
Dann scheint das vlt schonmal die richtige Richtung zu sein. Ich schreibe/flashe mein Programm direkt ab 0x8000000. Ich begebe mich dann mal nach der Arbeit auf die Suche wie dieses Layout auszusehen hat und melde mich dann danach mit hoffentlich positiven Nachrichten.
:
Bearbeitet durch User
Ich hab bisher folgenden Code aus den Beispielen gekonnt ignoriert. Ich vermute das ich das der erste Eintrag dann in den SP geschrieben wird... der Zweite ist die Start Adresse meines Programms und dann der Platz "space" für die ISR Tabelle ... ist das so korrekt?
1 | .word 0x200... |
2 | .word 0x800... |
3 | .space 0xe4 |
4 | |
5 | ... |
6 | Programm ... |
Ja, wobei es fehleranfällig ist die Adressen explizit anzugeben statt das den Linker machen zu lassen. Hier: https://www.mikrocontroller.net/articles/ARM-ASM-Tutorial#Project_template_.26_makefile wird ein Minimal-Assembler-Projekt für den STM32F103 gezeigt.
Vielen Dank für die Unterstützung :) Ich werde das ja dann in meinen Compiler hinterlegen müssen. Die .space und .word muss ich dann auch noch in meinem Assembler hinzufügen. Ein Linker habe ich noch nicht programmiert. Werde also noch genug zu tun haben.
Alle Tipps haben sehr geholfen. Von "Programmierer": Die Informationen das zuerst die Stackpointer adresse kommt und danach der Reset Handler etc. Ich hab mein Assembler um .space und .data erweitert und nun kann ich es problemlos mit mein Compiler programmieren. und auch deine Antwort "Uwe Bonnes" hat sehr geholfen, erst nach dem ich den 0 bit gesetzt habe, lief mein Programm auch nach dem ich den Microcontroller vom Strom getrennt habe. Vielen vielen Dank.
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.