Forum: Mikrocontroller und Digitale Elektronik STM32 kann jemand ein Demo Programm schreiben?


von Rainer S. (rsonline)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>Kann jemand ein kleines Blinker-Programm dafür schreiben?

Sonst hast du keine Probleme?

von Rainer S. (rsonline)


Lesenswert?

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.

von Harald B. (haraldino)


Lesenswert?

dreist!

geh doch mal auf die st website und saug dir mal die library mit den 
demo programmen

von Mischmasch (Gast)


Lesenswert?

Wann muss die Hausaufgabe denn fertig sein?

von Martin Beuttenmüller (Gast)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Rainer S. (rsonline)


Lesenswert?

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

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

>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.

von Rainer S. (rsonline)


Lesenswert?

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?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Rainer S. (rsonline)


Lesenswert?

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?

von Dennis X. (Gast)


Lesenswert?

Mischmasch schrieb:
> Wann muss die Hausaufgabe denn fertig sein?

Genau das habe ich auch gerade gedacht...
Also auf der Webseite gibts haufenweiße Demos!

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Hier die ELF Datei. Die sollte mit dem Olimex / OpenOCD zu laden gehen.
(nicht getestet, also ohne Gewähr)

von Rainer S. (rsonline)


Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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).

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Geht das jetzt?

von Rainer S. (rsonline)


Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Jetzt besser?

von Rainer S. (rsonline)


Lesenswert?

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 ...

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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)

von Mischmasch (Gast)


Lesenswert?

Langsam wird es aber knapp wenn morgen der Abgabetermin für die 
Hausarbeit ist.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Rainer S. (rsonline)


Angehängte Dateien:

Lesenswert?

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.

von Rainer S. (rsonline)


Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Rainer S. (rsonline)


Lesenswert?


von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Nein, natürlich das original Tool, das es von der st.com Homepage zu 
laden gibt.

von Rainer S. (rsonline)


Lesenswert?

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?

von Manfred (Gast)


Lesenswert?

> z.B. das ST-Link Utility und dem passenden JTAG Interface kosten 30 bunte 
Zettel.

Also mind. 150€ ?!

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Rainer S. (rsonline)


Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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
Noch kein Account? Hier anmelden.