STM32 kann jemand ein Demo Programm schreiben?

OP #2448095
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.
OP #2448125
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.
Gast #2462246
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
OP #2462485
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
(Firma: EleLa - www.elela.de) #2462910
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.
OP #2462995
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?
(Firma: EleLa - www.elela.de) #2463030
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.
OP #2463110
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?
(Firma: EleLa - www.elela.de) #2463986
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).
OP #2464098
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.
(Firma: EleLa - www.elela.de) #2464179
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)
(Firma: EleLa - www.elela.de) #2464209
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.
OP #2464278
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.
Angehängte Dateien:
OP #2467609
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.
(Firma: EleLa - www.elela.de) #2467847
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren