Moin! Ich bin ganz frisch in Programmieren und deshalb spiele ich noch mit STM32. Taster ist auf Pin PC_13, als SW umbenannt, GPIO_Input LED_1 auf PA5, GPIO_Output LED_2 auf PA6, GPIO_Output LED_3 auf PA7, GPIO_Output Taster sitzt direkt auf der Platine und Ende ist auf GNR angeschlossen, kein extra Widerstand. Programm, /* USER CODE BEGIN WHILE */ while (1) { /* */ if (!HAL_GPIO_ReadPin(SW_GPIO_Port, SW_Pin)) { while (HAL_GPIO_ReadPin(SW_GPIO_Port, SW_Pin)==1) { HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, SET); HAL_GPIO_WritePin(LED_2_GPIO_Port, LED_2_Pin,RESET); HAL_GPIO_TogglePin(LED_3_GPIO_Port, LED_3_Pin); HAL_Delay(60); } } else { HAL_GPIO_WritePin(LED_3_GPIO_Port, LED_3_Pin,RESET); HAL_GPIO_TogglePin(LED_1_GPIO_Port, LED_1_Pin); HAL_Delay(100); HAL_GPIO_TogglePin(LED_2_GPIO_Port, LED_2_Pin); HAL_Delay(100); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ Wenn ich nichts mache Blinken Led 1 und 2 vor sich hin. Wenn Taster gedruckt wird, leuchtet Led 1 und Led 3 blinkt ziemlich furchteinflößend(nur mal zum testen). Zweites mal Taster betätigen, soll sich Ausgangszustand wieder herstellen und Led 1 und 2 sollten vor sich hin blinken. Damit ein Led nicht am leuchten Bleibt während ich da rum schalte, habe ich betroffene Leds "RESET´tet" in Code. Ich vermute mal, dass mein Code ist zu "Grün" ist und obwohl ich den Taster Drucke, passiert teilweise die Umschaltung nicht, ich sehe das Board den Schaltvorhang mitbekommt, in dem das Blinken von LED´s Aufhört. Mal funktioniert die Vorhabe, mal nicht, was habe ich falsch gemacht? Lasst mich nicht doof sterben =) By the Way, zu Verfügung steht mit die Seite https://os.mbed.com/platforms/ST-Nucleo-F401RE/#board-pinout Kann sein dass ich die PA_10,PA_2,PA_3 und so weiter nicht als Taster/Schalter anwenden kann, denn ich habe es auf GPIO_Input gestellt und habe nicht den erforderlichen Resultat erhalten, so wie bei PC_13...
:
Bearbeitet durch User
Leon D. schrieb: > Lasst mich nicht doof sterben Dann vergrößere dein Wissen und Können in Elektronik, Schaltungstechnik, Programmierung - kurzum, lerne selbst dazu. Das ist das Einzige, was dir wirklich hilft. W.S.
Leon D. schrieb: > PA_2,PA_3 sind als UART zum ST-Link verdrahtet, also erst einmal nachsehen was das Board vorgibt.
Leon D. schrieb: > By the Way, zu Verfügung steht mit die Seite > https://os.mbed.com/platforms/ST-Nucleo-F401RE/#board-pinout auf der Seite gibt es auch gleich ein geiles OS das die Entwicklung vereinfacht und direkt mit diesem Board genutzt werden kann :) Geht mit diesem Board sogar mit dem Online Compiler, es muss keine Software installiert werden. Der Hinweis von Pegel war auch richtig, PA2/PA3 sind fest mit dem STLink verbunden. Bzw. über die Jumper die man öffnen könnte, würde ich aber nicht machen. Mit wenigen Zeilen Code kann man das printf() über USB aktivieren. In der IDE kann man ein Projekt mit dem Board als Basis starten und die verdrahtete Peripherie initialisieren lassen. Für das eigentliche Problem solltest du eine Flankenerkennung bauen und dann mit jeder steigenden oder fallenden eine Modus Variable umschalten.
Leon D. schrieb: > Wenn ich nichts mache Blinken Led 1 und 2 vor sich hin. > Wenn Taster gedruckt wird, leuchtet Led 1 und Led 3 blinkt ziemlich > furchteinflößend(nur mal zum testen). Das ist genau das was du programmiert hast 😉 Mal kurz zum Nachdenken, weil ich denke du erwartest was anderes. Dein Programm sieht so aus:
1 | Mache für immer |
2 | {
|
3 | Wenn Taste gedrückt |
4 | {
|
5 | LED1 an |
6 | LED2 aus |
7 | Warte 60ms |
8 | Wechsle zwischen LED3 an und aus, bzw zwischen aus und an |
9 | }
|
10 | Sonst
|
11 | {
|
12 | LED3 aus |
13 | Wechsle LED1 |
14 | Warte 100ms |
15 | Wechsle LED2 |
16 | Warte 100ms |
17 | }
|
18 | } (gehe zum Anfang) |
Die Blinke Zeit ohne Taster gedrückt ist also 3.5mal so lange wie die mit gedrückten Taster
Erst mal vielen lieben Dank für viele Tipps. Ich setze mich tatsächlich noch auseinander mit User Manual. Ist aber alles auf "Ingenieurisch", da habe ich noch einige Semester vor mir =D Jap Jens, genau so wollte ich es, ich weiß das es kaum Sinn ergibt, aber ich wollte mal testen, ob ich es überhaupt hin kriege. Ein mal Taster drucken, los lassen, ist eine Relais Selbshaltung mit While Schleife gelöst. Wenn SW Taste angezogen ist: if (!HAL_GPIO_ReadPin(SW_GPIO_Port, SW_Pin)) Dann Led 1 brennt dauerhaft, Led 2 ausmachen(falls vorher an gewesen), Led 3 blinkt 60ms. Nochmal Tate drucken, dann ist die While Bedienung von while (HAL_GPIO_ReadPin(SW_GPIO_Port, SW_Pin)==1) erfühlt und es kann weiter gehen. Sonst dauerhaft Led 3 aus, Led 1 und Led 2 blinken(jeweils 100ms). Mein Problem ist, das es nur sporadisch funktioniert, vielleicht halte ich die Taste zu lange gedruckt? Gibt es vielleicht eine Option noch in .IO File es zu korrigieren? Was J.S. meint, das habe ich leider aus der Seite nicht gefunden...klingt alles sehr hilfreich, ich lese mich da durch =) "In der IDE kann man ein Projekt mit dem Board als Basis starten und die verdrahtete Peripherie initialisieren lassen."- finde ich irgendwie nicht =(
Leon D. schrieb: > Nochmal Tate drucken, dann ist die While Bedienung von while Lese noch einmal was ich geschrieben habe, und denke noch einmal nach. Dein if sagt mache das eine so lange die Taste gedrückt ist, und mache das andere so lange keine Taste gedrückt ist. Nicht wechsle bei Tastendruck und wieder los lassen. Weil es wahrscheinlich als nächstes kommt: dein Taster wird beim Betätigen mit hoher Wahrscheinlich auch nicht nur einen Wechsel erzeugen. Jeder normale Schalter "prellt" (google mal "Taster entprellen") Desweiteren schau dir ruhig mal ein paar Tutorials (vielleicht auch als Video) an.
Leon D. schrieb: > "In der IDE kann man ein Projekt mit dem Board als Basis starten und die > verdrahtete Peripherie initialisieren lassen."- finde ich irgendwie > nicht =( Es gibt mehrere Möglichkeiten ein Projekt zu starten, aus der IDE 'New STM32 Project' und es startet der Target Selektor. Da kann man wählen ob man mit der nackten CPU startet oder bei Board eben mit einem Nucleo/Disco Board. Wenn man das wählt, dann werden die fest verdrahteten Sachen schon vorkonfiguriert.
ich habe erst jetzt verstanden, dass ich HAL_GPIO_WritePin anwenden sollte. als Taster Befehl,
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.