Forum: Mikrocontroller und Digitale Elektronik STM32F103VET


von Julian (Gast)


Lesenswert?

Hi Leute ich brauche bisschen Hilfe. Ich habe ein kleines Programm 
geschrieben mit dem ich einen Arduino code mithilfe eines userinterfaces 
schreibe. Also im Grunde weise ich nur Befehle einzelnen Pins zu. Jetzt 
stehe ich aber vor einem Problem ich möchte diesen Code direkt auf den 
MCU schreiben. Was brauche ich dafür? Also im Grunde habe ich jetzt eine 
Textdatei wie man sie auch in ARDUINO IDE hat. Diese soll jetzt über 
einen Schalter z.b. "Upload" auf das Board und dort ihre Arbeit 
verrichten :)




Danke im Voraus !
Julian

von Timmo H. (masterfx)


Lesenswert?

Du musst erstmal das STM32F1 Framework installieren. Und dann verbindest 
du entweder dein ST Link Clone oder dein STM32 via USB UART Converter 
und Boot0 setzen, so wie hier beschrieben: 
https://www.heise.de/developer/artikel/Keine-bittere-Pille-die-Blue-Pill-mit-ARM-Cortex-M3-4009580.html

von Stefan F. (Gast)


Lesenswert?

Julian schrieb:
> Ich habe ein kleines Programm
> geschrieben mit dem ich einen Arduino code mithilfe eines userinterfaces
> schreibe. Also im Grunde weise ich nur Befehle einzelnen Pins zu.

Was das bedeuten soll, erschließt sich mir leider gar nicht.

Was du vor hast klingt für mich danach, dass du ein Script schreiben 
willst, welche Arduino und avrdude aufruft. Dazu gibt es Anleitungen, 
die du mit den Stichworten "arduino command line" und "avrdude command 
line" finden kannst. Was die Script Programmierung angeht, suche nach 
Tutorials/Anleitungen für "Windows batch dateien" bzw. "Linux bash 
scripte".

von Julian (Gast)


Lesenswert?

Vielen Dank euch beiden! Also ja im Grunde möchte ich nur eine Batch 
ausführen welche ein skatch auf mein Board schreibt. Ich habe mich in 
AVRDUDE bisschen eingelesen aber ich finde keine Unterstützung für 
meinen CHIP...

Wie gesagt im mein Programm erzeugt eine Sketch Datei welche ich dann 
auf das Board laden möchte hier ein beispiel für meine erstellte Datei:

Serial.begin(9600);
  // led pin
  pinMode(PE2, OUTPUT); pinMode(PE3, OUTPUT); pinMode(PE4, OUTPUT); 
pinMode(PE5, OUTPUT); pinMode(PE6, OUTPUT);

if (Serial1.available() > 0)
  { data = Serial.read();
    switch (data) {
      // LED
      case 'L1ON': digitalWrite(PE2, HIGH); break;
      case 'L1OF': digitalWrite(PE2, LOW); break;
      case 'L2ON': digitalWrite(PE3, HIGH); break;
      case 'L2OF': digitalWrite(PE3, LOW); break;
      case 'L3ON': digitalWrite(PE4, HIGH); break;
      case 'L3OF': digitalWrite(PE4, LOW); break;
      case 'L4ON': digitalWrite(PE5, HIGH); break;
      case 'L4OF': digitalWrite(PE5, LOW); break;
      case 'L5ON': digitalWrite(PE5, HIGH); break;
      case 'L5OF': digitalWrite(PE5, LOW); break;

von Johannes S. (Gast)


Lesenswert?

das sollte vorher vielleicht noch kompiliert werden. Dafür gibts jetzt 
auch ein Arduino Command line interface, Arduino-cli, siehe
https://github.com/arduino/arduino-cli
https://www.heise.de/developer/meldung/Arduino-hat-jetzt-eine-Konsole-4145988.html

von Stefan F. (Gast)


Lesenswert?

Julian schrieb:
> Ich habe mich in
> AVRDUDE bisschen eingelesen aber ich finde keine Unterstützung für
> meinen CHIP...

Avrdude ist natürlich nur für AVR Mikrocontroller. Da habe ich dich 
leider in die Irre geführt. Sorry.

Falls der Upload mit arduino-cli nicht klappen sollte (falls ich nicht 
erwarte), finde heraus, mit welchem Tool die Arduino IDE das Programm 
überträgt. Wenn du in den Einstellungen der IDE alle Ausgaben 
einschaltest, müsste man das sehen können - inklusive aller nötigen 
Parameter.

Zur Not geht vielleicht auch das: 
https://sourceforge.net/p/stm32flash/wiki/Home/

von W.S. (Gast)


Lesenswert?

Julian schrieb:
> Vielen Dank euch beiden! Also ja im Grunde möchte ich nur eine Batch
> ausführen welche ein skatch auf mein Board schreibt.

Könntest du dich vielleicht derart ausdrücken, daß man den Sinn deiner 
Worte begreifen kann?

Eine Batch-Datei bzw. shell-Skript ist etwas, das auf einem PC dadurch 
läuft, daß es von einem dazu passenden Kommando-Interpreter-Programm 
interpretiert und ausgeführt wird. Was also hat so etwas bittesehr mit 
einem Mikrocontroller zu tun?

Und was verstehst du unter "welche ein skatch auf mein Board schreibt"?



Julian schrieb:
> if (Serial1.available() > 0)
>   { data = Serial.read();
>     switch (data) {
>       // LED
>       case 'L1ON': digitalWrite(PE2, HIGH); break;
>       case 'L1OF': digitalWrite(PE2, LOW); break;
> etc...

Das sieht aus, als wenn du eine Art Kommando-Interpreter auf deinem 
Mikrocontroller haben willst.

Aber so etwas geht ganz anders.
Nämlich im Prinzip etwa so:
1. in der Grundschleife von main rufst du eine Routine auf, die aus den 
hereintrudelnden Zeichen eine Kommandozeile zusammenbaut.
Also etwa so:
in main:
immerzu:
{ talk(Serial1);
  anderes Zeugs..
}

Und im Kommandoprogramm:
1
void talk(int IdSerial)
2
{ char c;
3
  if (!Char_Available(IdSerial)) return;
4
  c = Get_Char(IdSerial);
5
und hier dann die Vor-Auswertung von c.

Nämlich, ob es ein normales Textzeichen ist und deshalb an die 
Kommandozeile angefügt werden muß, oder ob es ein Editierzeichen ist 
(z.B. Backspace) und folglich die bereits bestehende Kommandozeile 
entsprechend editiert werden muß, oder ob es ein Zeilenabschluß (CR oder 
LF je nach deinem Gusto) ist und folglich die Kommandozeile 
interpretiert und sonit ausgeführt werden muß.

Zum Interpretieren brauchst du ne zweite Funktion:
1
void Kommando (void)
2
{ char* ZPtr;   // Zeiger in die Kommandozeile
3
4
  Zptr = Kommandozeile; //
5
  if (match("L1ON",&ZPtr) { mache etwas..; return; }
6
  if (match("L1OFF",&ZPtr) { mache etwas anderes..; return; }
7
  ...usw.
8
}
Und die Vergleichsfunktion
1
bool match(Vergleichsstring, 
2
           Zeiger auf TextZeiger)
schreibst du dir selber. Diese soll, wenn der Vergleich positiv 
ausfällt, den Zeiger ZPtr entsprechend weiterstellen, damit nachfolgende 
Aufrufe von match die weiteren Teile der Kommandozeile interpretieren 
können.

W.S.

von Hugo H. (hugohurtig1)


Lesenswert?


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.