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
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
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".
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;
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
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/
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.
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.