Habe hier ein selbstgemachtes Board mit einem STM32F103C4T6A Controller. Allerdings noch keine Entwicklungsumgebung hierfür. Am Controller sind 2 LED's angeschlossen, die mit 5V beschaltet sind. Die Pins PB12 und PB13 müssten nach Masse geschaltet werden, damit die Leuchten (Pins als open drain Ausgang konfiguriert). Kann jemand ein kleines Blinker-Programm dafür schreiben? Das müsste dann im ELF Format sein. Ein Uploadprogramm habe ich. Grundsätzlich reagiert der Controller auf das Startbyte zum seriellen Uploaden.
>Kann jemand ein kleines Blinker-Programm dafür schreiben?
Sonst hast du keine Probleme?
holger schrieb: >>Kann jemand ein kleines Blinker-Programm dafür schreiben? > > Sonst hast du keine Probleme? In Pascal sähe das etwa so aus: procedure pinconfigure; begin portconf( PB12 , opendrain ); portconf( PB13 , opendrain ); end; procedure pause; var x : longint; begin for x := 1 to 5000000 do ; end; procedure led_an; begin port( PB12 , false ); port( PB13 , false ); end; procedure led_aus; begin port( PB12 , true ); port( PB13 , true ); end; begin pinconfigure; while true do begin led_an; pause; led_aus; pause; end; end.
dreist! geh doch mal auf die st website und saug dir mal die library mit den demo programmen
Auf's Töpchen gehen kann der Kleine schon ganz alleine - - zum "Abwischen" braucht er dann Euch. Gelobt sei der Ehrgeiz, es selbs zu schaffen: wozu sich sonst mit DIY auseinandersetzen ??? Mit 'hacktischem' Gruß ans Forum Martin
Hier kann mein "Blink-LED, komplettes Eclipse-Workspace von MmVisual" http://www.mikrocontroller.net/articles/STM32_Eclipse_Installation#Downloads geladen werden. Wenn Du Anpassungen haben willst, schreibe mir ein PN.
Harald Brunn schrieb: > dreist! Was soll hier dreist dran sein? Dreist wäre wenn man nach etwas fragen würde was eine Woche Arbeit bedeutet. Außerdem wäre ich bereit eine Gegenleistung dafür zu erbringen. Mischmasch schrieb: > Wann muss die Hausaufgabe denn fertig sein? Martin Beuttenmüller schrieb: > Auf's Töpchen gehen kann der Kleine schon ganz alleine - > - zum "Abwischen" braucht er dann Euch. Vielleicht könnt Ihr eure Unzufriedenheit mit der ungerechten Welt mit eurem Psychologen besprechen. Das macht mehr Sinn. Hallo Markus, wollte eigentlich nur sehen, ob der Controller richtig eingelötet ist. Der nächste Schritt wäre dann ein Entwicklungswerkzeug anzuschaffen. Ich favorisiere dabei entweder die Demo-Version von Keil (hauptsächlich den Assembler), weil die Programme erst mal sehr klein sind. Oder besser Freepascal. Denn damit programmiere ich auch andere Sachen und der Compiler kann auch ARM Code erzeugen. http://www.freepascal.org
>Oder besser Freepascal Dann kennst Du sicher auch diesen Thread: http://www.lazarusforum.de/viewtopic.php?f=9&t=5444 Bleibe lieber bei C. Für keine Spende kann ich Dir auch gerne helfen Eclipse & Co ein zu richten. Ich würde mich über TeamViewer bei Dir einloggen und wir würden so alles gemeinsam installieren und ich könnte die eine oder andere Kleinigkeit zeigen.
Markus Müller schrieb: > Dann kennst Du sicher auch diesen Thread: Nein, aber Du kennst diesen Beitrag "XMEGA reif für den produktiven Einsatz?" weil Du hier mitgeschrieben hast. Wenn man so lange in Pascal programmiert hat ist C schwierig. Und verzetteln wollte ich mich eigentlich nicht. Ich lass ungern über TeamViewer jemand von außen da dran. Auch Neuinstallationen von Programmen versuche ich möglichst zu umgehen. Wollte eigentlich nur wissen ob die LED's (PB12 und PB13) leuchten, bzw. blinken und der Controller richtig eingelötet ist. Das wäre dann ein kleines Erfolgserlebnis. Ist das möglich?
In dem jetzigen BlinkLED von mir ist das drin:
1 | while(1) |
2 | {
|
3 | Timer_Task(); |
4 | |
5 | GPIO_WriteBit(GPIOA, GPIO_Pin_0, tBlink); // Port A.0 blinken lassen |
6 | GPIO_WriteBit(GPIOC, GPIO_Pin_7, tBlink); // Port C.7 blinken lassen |
7 | GPIO_WriteBit(GPIOC, GPIO_Pin_12, tBlink); // Port C.12 blinken lassen |
8 | |
9 | if (tBlink) // LEDs vom EVAL-Board "STM3210C-EVAL" |
10 | GPIO_SetBits(GPIOD, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_7 | GPIO_Pin_13); |
11 | else GPIO_ResetBits(GPIOD, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_7 | GPIO_Pin_13); |
12 | }
|
Jetzt weißt Du welcher Pin blinkt. Wenn Du nicht willst dass ich mich auf deinen PC einlogge, dann wird es schwierig, da Eclipse und deren Umgebung schon etwas mehr Aufwand ist bis alles läuft (3..4h). Hier im Forum gibt es viele Fragen und Antworten diesbezüglich, dennoch ist es einfacher, wenn jemand einen an die Hand nimmt und zeigt. Bei TeamViewer gibt es auch Einstelloptionen, dass der gegenüber keine Rechte mehr hat, z.B. nur mit der Maus zeigen kann wo geklickt werden soll, aber selbst nicht klicken kann. Auch in dem anderen Thread habe ich von Pascal abgeraten. Der Link mit der Unit habe ich angeschaut, aber es wurde da nur ein Bruchteil der Pheriperieregister umgesetzt.
Habe mich noch nicht intensiv damit beschäftigt, aber ich denke in Freepascal geht das schneller. Das hat wie in dem anderen Thread geschrieben ja auch schon jemand ans laufen bekommen. http://j-software.dk/stm32f103.php Ich finde, dass da schon eine Menge umgesetzt wurde: Sysclock, PLL, GPIO, Timer, Uart, Nvic, ... viel mehr brauche ich nicht. Und wenn doch kann man ja auch noch direkt die Peripherie ansprechen. Dafür nehme ich mir dann die Zeit. Die Mailingliste von FPC lese ich mit, die sind da relativ aktiv. Kannst Du das Programm mit den beiden Pins (PB12 und PB13) kompilieren und dann im ELF Format speichern, so dass ich den Controller hier mal testen kann?
Mischmasch schrieb: > Wann muss die Hausaufgabe denn fertig sein? Genau das habe ich auch gerade gedacht... Also auf der Webseite gibts haufenweiße Demos!
Hier die ELF Datei. Die sollte mit dem Olimex / OpenOCD zu laden gehen. (nicht getestet, also ohne Gewähr)
Danke. Download zum Controller funktioniert leider nicht. Das ELF File versucht ab Adresse 0 zu schreiben. Der Flash Speicher des Controllers ist jedoch ab Addresse 0x08000000 beheimatet. Der Controller hat 16k RAM ab Adresse 0x20000000.
Da sieht man mal wieder wie schwierig es mit Eclipse und Co ist. Da muss ich mal schauen dass ich den Stack Pointer anders initialisieren und den Compiler auf eine andere Adresse umbiege. Schreibe erst mal wie du das ELF File in die CPU bekommst, was du für Werkzeuge hast. Vielleicht muss ich da noch was anderes berücksichtigen. Alternativ könntest Du auch mit OBJCOPY aus dem ELF eine HEX mit dem FLASH Offset machen. und dann die Stack-Pointer Adresse in der HEX von Hand editieren (die ersten 4 Byte im Flash).
Markus Müller schrieb: > Schreibe erst mal wie du das ELF File in die CPU bekommst, was du für > Werkzeuge hast. Vielleicht muss ich da noch was anderes berücksichtigen. Das ist ein selbst geschriebenes Windows-Programm welches mir der Freepascal Experte für ARM gegeben hat. Er hat auch ein ELF File gesendet, welches laut diesem Programm auch korrekt in den Controller geladen wurde, jedoch aus anderen Gründen noch nicht funktioniert. Er meinte dass die .text section bei Addresse 0 ist. Und .data and .bss section nach 0x20000000. (correctly). > Alternativ könntest Du auch mit OBJCOPY aus dem ELF eine HEX mit dem > FLASH Offset machen. und dann die Stack-Pointer Adresse in der HEX von > Hand editieren (die ersten 4 Byte im Flash). Hört sich kompliziert an. Markus Müller schrieb: > Geht das jetzt? Leider wieder das gleiche.
Jetzt wird es in den Controller geladen. Jedoch wie beim Freepascal Kollegen auch keine LED an. Habe schon ein paar mal geschaut ob es die richtigen Pins sind. Beim Bootpin kann ja auch nicht viel falsch gemacht werden. Hmm ...
Das ist die Initialisierung:
1 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); |
2 | GPIO_InitTypeDef GPIO_InitSt; |
3 | GPIO_InitSt.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13; |
4 | GPIO_InitSt.GPIO_Mode = GPIO_Mode_Out_OD; |
5 | GPIO_InitSt.GPIO_Speed = GPIO_Speed_50MHz; |
6 | GPIO_ResetBits(GPIOB, GPIO_InitSt.GPIO_Pin); |
7 | GPIO_Init(GPIOB, &GPIO_InitSt); |
Das die Ausgabe:
1 | while(1) |
2 | {
|
3 | Timer_Task(); |
4 | GPIO_WriteBit(GPIOA, GPIO_Pin_0, tBlink); // Port A.0 blinken lassen |
5 | GPIO_WriteBit(GPIOC, GPIO_Pin_7, tBlink); // Port C.7 blinken lassen |
6 | GPIO_WriteBit(GPIOC, GPIO_Pin_12, tBlink); // Port C.12 blinken lassen |
7 | if (tBlink) // LEDs vom EVAL-Board "STM3210C-EVAL" |
8 | {
|
9 | GPIO_SetBits(GPIOD, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_7 | GPIO_Pin_13); |
10 | GPIOB->BSRR = GPIO_Pin_12 | (GPIO_Pin_13 << 16); |
11 | } else { |
12 | GPIO_ResetBits(GPIOD, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_7 | GPIO_Pin_13); |
13 | GPIOB->BSRR = GPIO_Pin_13 | (GPIO_Pin_12 << 16); |
14 | }
|
15 | }
|
Da sind jetzt zwar noch andere Ports drin, die sind aber nicht initialisiert. Somit nur PB12/13 blinken. Ich hab das jetzt auch geprüft. (mit STM32F103RE)
Langsam wird es aber knapp wenn morgen der Abgabetermin für die Hausarbeit ist.
Ein selbst geschriebenes Freepascal Programm. Ist ja nett. Aber bei gewissen Dingen würde ich mich lieber auf bereits geprüfte Freeware verlassen. z.B. das ST-Link Utility und dem passenden JTAG Interface kosten 30 bunte Zettel. Das Proggen mit Freepascal wird sicher auch klappen. Die Probleme beginnen dann erst wenn man z.B. dann doch ein TCP/IP Stack oder eine SD-Card nutzen möchte. Dafür gibt es in C bereits fertige Projekte. Aber die kann er bestimmt im Handumdrehen zu Pascal konvertieren oder nachproggen.
main.exe macht den Downloadvorgang. Ist eigentlich selbsterklärend. Bootloader anklicken. Filename eingeben (Browse, ELF Format) Comport eintragen, z.B. 'com6'. Baudrate eintragen. Dann 'Program' drücken. Wenn das bei Dir funktioniert liegt es hier an der Platine. Wenn nicht liegt's am selbstgeschriebenen Freepascal Programm.
Markus Müller schrieb: > Aber bei gewissen Dingen würde ich mich lieber auf bereits > geprüfte Freeware verlassen. Ich denke, dass das beim Freepascal Kollegen auch läuft. Sonst hätte er mir das nicht gegeben.
Nehme doch das ST Utility, damit kann man auch über serielle Schnittstelle laden. Ich hab jetzt nur den Link nicht zur Hand. Damit hättest Du eine Referenz.
Nein, natürlich das original Tool, das es von der st.com Homepage zu laden gibt.
Habe hier noch was gefunden. http://www.st.com/internet/mcu/product/216821.jsp Ist das dabei? Bzw. hier. http://www.st.com/internet/evalboard/product/210568.jsp Das scheint ein kompletter Assembler zu sein. Hast Du Bedenken die FP-Software auf Deinem Rechner zu laden?
> z.B. das ST-Link Utility und dem passenden JTAG Interface kosten 30 bunte
Zettel.
Also mind. 150€ ?!
Ich dachte eher sowas: http://de.farnell.com/stmicroelectronics/st-link-v2/programmierer-icd-f-stm8-stm32/dp/1892523 >Hast Du Bedenken die FP-Software auf Deinem Rechner zu laden? Nein, keine Zeit dafür.
Markus Müller schrieb: > Nein, keine Zeit dafür. Also hier hattest Du noch genug Zeit. Markus Müller schrieb: > Wenn Du nicht willst dass ich mich auf deinen PC einlogge, dann wird es > schwierig, da Eclipse und deren Umgebung schon etwas mehr Aufwand ist > bis alles läuft (3..4h). Das Testen des Programms dauert maximal 10 Minuten. Wäre nett wenn das gehen würde, dann wüsste ich wo ich weiter ansetzen muss. Wenn Du Bedenken wegen dem Programm hast wäre schade, würde ich aber respektieren.
Ich löte eine neue Platine zusammen, dann muss ich das noch proggen. Beitrag "Re: Ersatz für ISO1050 in SO8?" Wieso ladest Du nicht das Tool von ST? Damit hättest Du eine Referenz die funktioniert. PS: es sind mehr als nur 10 Minuten Arbeit. Erstmal muss ich ein Board mit passender seriellen Schnittstelle haben, bzw. die so umlöten. Schließlich muss das so verdrahtet sein wie in der Doku steht.
Das Download-Tool von ST heißt DfuSe (UM0412), V3.0.2 ist aktuell. Damit kann ich per USB meinen STM32F417 Controller flashen.
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.