Wieso deaktiviert die Funktion
1 | SysTick_Config(SystemCoreClock/100); |
den blauen Taster auf dem stm32f4-discoveryboard?
|
Forum: Mikrocontroller und Digitale Elektronik SysTick_Config() STM32F4Wieso deaktiviert die Funktion
den blauen Taster auf dem stm32f4-discoveryboard? Das Problem konnte ich reproduzieren. Du musst noch den Systick_handler programmieren, dann funktioniert es, zumindest bei mir: void SysTick_Handler(void){} 12V DC schrieb: > den blauen Taster auf dem stm32f4-discoveryboard? Drück einfach den Reset-Taster, dann blinkt es auch. Mir geht es nicht darum, dass der blaue Taster die LED an oder ausschaltet(das geht). Miene Frage ist, warum diese Funktion den Taster daktiviert und wozu sie da ist. Sie wurde nämlich in einem tutorial verwendet und daraufhin habe ich nach dem Fehler relativ lange gesucht(und ihn gefunden ;-)). Mich würde es nur interessieren. Man sagt ja immer, es gäbe keine dummen Fragen. Aber manchmal bin ich mir da nicht sicher. Das Hä bezog sich auf die Antwort von Manax, die ich 0 verstanden habe. Um das von Manax etwas zu erklären: Entprellung bedeutet, dass man das Prellen von Schaltern eliminiert. Prellen ist ein "Nachschwingen" des Schalters. Man drückt den Taster zwar nur einmal, der sendet jedoch öfter ein Signal. http://www.mikrocontroller.net/articles/Entprellung Soweit ich das verstanden habe, kann man mit sogenannten Timer-Routinen Taster entprellen. Also "schwingen die Taster noch nach", jedoch merkt die Software/der Timer, dass das nur das Prellen ist, da die Signale zu oft hintereinander bzw. zu schnell kommen. Wie ich die Frage verstehe: "Macht der Controller die Entprellung wohl mit Hilfe einer Timer-Routine?" (Hier wurde jedoch kein Timer initialisiert, also Antwort: Nein, außer die STMs machen das vielleicht implizit von sich aus. Das weiß ich nicht.) Grüße Welpe Dann definiere doch mal 'funzen'. Was genau 'funzt' denn nicht mehr? Soll heißen: Wie fragst du denn den Taster ab, so dass er nicht mehr funzt? Ein möglicher Zusammenhang zwischen Timer und bewusstem Taster sieht dergestalt aus, dass du eine 'Systemfunktion' hast, von der du den Taster-Zustand kriegst. Um den Taster zu entprellen, wird der Timer benutzt. Stellst du den Timer ab, klappt da natürlich nichts mehr. Fragst du aber den Taster selber in Form von Port-I/Os ab, gibt es aus meiner Sicht keinen Grund, warum das nicht funzen sollte. Aber: Ich kenne ja auch das Board nicht bzw. wie man die I/O Sektion des µC initialisieren muss, damit der I/O läuft. Es ist wie immer: Ohne Programm (möglichst minimalistisch) ist es schwer, da irgendwas vernünftiges dazu zu sagen. Kann ja auch sein, dass es da eine QUerverbindung zwischen dem Takt und den Ports gibt, indem dieser Takt als Takt für das I/O Subsytstem fungiert. :
Bearbeitet durch User
Du hast wahrscheinlich ein komplett anderes Problem benutz den Debugger dann siehst du das dein Programm gar nicht mehr läuft, also auch nicht mehr den Taster abfragen kann die Funktion :
aktiviert den Systemtimer (wie der Name schon sagt) und dieser springt zu gegebener Zeit in eine Interrupt-Service-Funktion die hast du aber in deinem Programm wahrscheinlich nicht definiert also springt die CPU ins Nirvana füge mal diese Zeilen nach deiner Main hinzu :
die macht zwar keinen Sinn aber zumindest hat die CPU dann ein Sprungziel und damit sollte auch der Taster wieder "funzen" sag bescheid ob es das war Gruss Uwe :
Bearbeitet durch User
Tobi D. schrieb: > Das Problem konnte ich reproduzieren. > Du musst noch den Systick_handler programmieren, dann funktioniert es, > zumindest bei mir: > void SysTick_Handler(void){} hust ^^ Ich will einfach nur wissen, was diese funktion macht. Nebenbai wäre es auch noch gut, zuwissen, was diese Funktion mit dem blauen Taster macht. 12V DC schrieb: > Ich will einfach nur wissen, was diese funktion macht. Den Systick konfigurieren (eine Exception, die alle X Zyklen auftritt) > Nebenbai wäre es > auch noch gut, zuwissen, was diese Funktion mit dem blauen Taster macht. Nichts. ---- Wie meine Vorredner schon geschrieben haben fehlt dir wahrscheinlich (Glaskugel) ein Handler für den Systick, so dass dein Code vorher in eine Endlosschleife durch die Exception läuft. Tobi D. schrieb: > Tobi D. schrieb: >> Das Problem konnte ich reproduzieren. >> Du musst noch den Systick_handler programmieren, dann funktioniert es, >> zumindest bei mir: >> void SysTick_Handler(void){} > > *hust* > ^^ ...hatte ich überlesen (der TO wahrscheinlich auch :-) 12V DC schrieb: > Ich will einfach nur wissen, was diese funktion macht. welche Funktion ? und gegenfrage...wie gut kennst du dich im Programmieren aus ? UB Im ARM programmieren kenne ich mich nooch nicht sehr gut aus, aber allgemein würde ich mich als Fortgeschritten einstufen(C, VB, HTML) Ich poste bald mal den kompletten Quellcode vielleicht hilf der weiter. Der ist übrigens in dem Beitrag "Stm32f4 Taster" auf diesem Forum zu finden(abgeschoben etwas älter). 12V DC schrieb: > Ich will einfach nur wissen, was diese funktion macht. Nebenbai > wäre es > auch noch gut, zuwissen, was diese Funktion mit dem blauen Taster macht. Der sytick ist ein Timer, der so wie du ihn konfiguriert hast 100 mal pro sek einen interrupt auslöst ( systickhandler ) darin kannst du machn was du willst. benutzt wird er gerne imirgendeine zeitbasis für synchrone prozesse zu haben. mal unter uns hausfrauen. den entdeckerdrang in allen ehren. bevor man sich aber an die hardware begibt, wenigstens mal grob in das datenblatt schauen oder zumindest ein gutes tutorial durcharbeiten. Hi 12VDC, du brauchst deinen Code nicht zu posten wenn du dich, wie du schreibst, in Programmierung auskennst, dann weißt du über Interrupts bescheid und wie man sie benutzt 1. Interrupt einschalten 2. Interrupt Funktion schreiben du hast Punkt 1 gemacht mit :
aber Punkt 2 fehlt :
du hast jetzt zwei Möglichkeiten : 1. entweder den Interrupt nicht aktivieren durch weglassen vom SysTick_Config Aufruf (dann brauchst du auch keinen Interrupt-Handler) oder 2. den Interrupt-Handler in dein Programm hinzufügen mach eins von den beiden und alle werden glücklich UB noch eine Frage: warum fürst du eine Funktion (SystickConf...) aus von der du garnichts weißt? Muss doch irgendeinen Grund gehabt haben. Also irgendwas musst du doch damit vorgehabt haben ? 12V DC schrieb: > aber allgemein würde ich mich als Fortgeschritten einstufen(C, VB, HTML) Wenn das Fortgeschritten ist, was ist dann Anfänger? @ggast, Uwe B Ich weiß, die Geschichte mit dem Systick habe ich aus einem Tutorial genommen(mystm.de) und nur den Sxstick-Handler weggelassen, Weil ich dachte, eine Funktion, die niochts macht und auch nicht aufgerufen wird, macht nichts. Da die Funktion nicht näher beschrieben wurde, und die LED's auf diese Weise funktionierten, kam ich erst sehr spät darauf, als ich zwei Codes abglich(das andere war von eliaselectronik.com glaube ich). Ich frage mich wie eine Interruptfunktion den Taster ignoriert(deaktiviert?) aber gleichzeitig die LED's leuchten lässt, ohne irgendwelche (sichtbaren) PWM Ausgaben. Frage: Wird der Systickhandler während des Interrupts ausgeführt? @Kindergärtner Als Anf#änger würde ich VB und HTML & Co. lernen. Was hast du gegen die Aussage? Würdest du dich mit den Kentnissen Anfänger nennen? >mystm.de
oder
www.mystm.de
gibt es nicht. Kannst Du mal bitte einen kompletten Links posten?
12V DC schrieb: > @ggast, Uwe B > > Ich frage mich wie eine Interruptfunktion den Taster > ignoriert(deaktiviert?) aber gleichzeitig die LED's leuchten lässt, ohne > irgendwelche (sichtbaren) PWM Ausgaben. gut ich versuchs noch einmal...(mein letzter Post in diesem Thread) Ausgangslage = dein Programm ist ohne Systick-Handler 1. Du schaltetst die Platine ein (Power-ON) 2. Die CPU arbeitet deine "initApplication"-Funktion ab und startet den Systick-Timer (mit 10ms Intervall) 3. Die CPU ließt den blauen Button-EIN 4. Der Button ist nicht gedrückt 5. Die CPU schaltet die blaue LED ein (weil Button=Lo) 6. GOTO 3 7 !! ... 10ms nach Power-ON feuert der Systick-Timer und die CPU will in den Systick-Handler springen ABER es gibt keinen Systick-Handler...die CPU landet außerhalb vom definierten Code und wahrscheinlich in einem Default-Handler von da kommt die CPU nicht mehr raus Ergebnis : die blaue LED leuchtet fröhlich vor sich hin bis zum Sankt-Nimmerleinstag end of a great story from a little bug ! :
Bearbeitet durch User
@lippy http://www.mystm32.de/doku.php @uwe b Vielen Dank, jetzt habe ich es verstanden Meine letzte Frage in diesem Thread: 12V DC schrieb: > Wird der Systickhandler während des Interrupts ausgeführt? 12V DC schrieb: > Als Anf#änger würde ich VB und HTML & Co. lernen. Was hast du gegen die > Aussage? Würdest du dich mit den Kentnissen Anfänger nennen? Sowas von. VB und HTML sind ja nichtmal richtige Programmiersprachen. Wenn ich eine Reihe von unterschiedlichen Sprachen, die fortgeschrittene Programmiertechniken unterstützen (wie C++, Java, ruby, Scala, vllt LISP) sowie eine Reihe von Technologien (wie Webgedöns, Embedded, PC, 3D-Zeug, Datenbanken, parellele Programmierung, ...) beherrsche, die auch alle gut anwenden kann (und verstehe welche man wo anwendet), und dort auch große komplexe Programme ordentlich umsetzen kann, dann würde ich mich vielleicht fortgeschritten nennen. Ich weiß nicht, aber ich würde nach 4 Jahren Programmiererfahrung schon sagen, das VB einbe Programmiersprache ist, vielleicht keine höhere, aber es ist trotzdem eine. Außerdem kommt es ja wohl nicht darauf an, wie viele höhere manb beherrscht, denn wennn man sich mit einer Sprache länger beschäftigt, dann kennt man die grundlegenden Algorithmen ja auch und darauf kommt es meines Erachtens viel mehr drauf an. Außerdem nur zur Info: Ich würde C als höhere Programmiersprache bezeichnen, den daran, das der gesamte Linux-Kernel aus Asm & C besteht (von Phyton-Scripts mal abgesehen). 'Webgedöns' und 3D Zeug braucht einen Hardwareprogrammierer ja wohl eher net zu beschäftigen, oder?? Evt. sollte man sich eine Website basteln können, aber sonst lerne ich nur das, was ich unmittelbar brauche. 12V DC schrieb: > Ich weiß nicht, aber ich würde nach 4 Jahren Programmiererfahrung schon > sagen, das VB einbe Programmiersprache ist, vielleicht keine höhere, > aber es ist trotzdem eine. Du programmierst 4 Jahre in VB und verspürst nicht den Wunsch nach etwas besseren? Oje. 12V DC schrieb: > Außerdem kommt es ja wohl nicht darauf an, > wie viele höhere manb beherrscht, denn wennn man sich mit einer Sprache > länger beschäftigt, dann kennt man die grundlegenden Algorithmen ja auch > und darauf kommt es meines Erachtens viel mehr drauf an. Nun, das ist ein häufiger Irrtum. Solange es um ein bisschen Algorithmen rechnen geht, stimmt das vielleicht. Aber zur Modellierung größerer Programme macht die Wahl der Programmiersprache eine Menge aus; z.B. die Features zur Metaprogrammierung, Compiletime-Rechnung, RAII, Exceptions, Value Types, allgemein zur Kapselung etc. in C++ ermöglichen abstrakten, effizienten und wiederverwendbaren Code auf einem Level, das in anderen Sprachen überhaupt nicht zu erreichen ist. Wenn man nun um diese unterschiedlichen Möglichkeiten, deren Anwendung und Vor&Nach-Teile, in verschiedenen Sprachen weiß, und nicht nur Schmalspur- VB und C, dann kommt man eher in den Bereich des "Fortgeschritten". 12V DC schrieb: > Ich würde C als höhere Programmiersprache bezeichnen, den > daran, das der gesamte Linux-Kernel aus Asm & C besteht (von > Phyton-Scripts mal abgesehen). Ja, aber es geht "höher". Dass der Linux Kernel in C ist, hat historische (und persönliche, seitens Torvalds') Gründe; auch beim Kernel-Development kann man stark von den Features von C++ profitieren. 12V DC schrieb: > 'Webgedöns' und 3D Zeug braucht einen Hardwareprogrammierer ja wohl eher > net zu beschäftigen, oder?? Nicht unbedingt. Aber um sich als fortgeschrittenen Programmierer bezeichnen zu dürfen, sollte man eine Reihe an Feldern kennen, und nicht nur eines (wie Mikrocontroller); es muss nicht unbedingt Web sein. > Evt. sollte man sich eine Website basteln > können Wenn man die dann nur in HTML von Hand codet... urks. 1.)ich programmiere seit 3 Jahren nicht mehr VB. 2)Du hast natürlich Recht, das c++ seine Vorteile hat, aber zum Einstieg war mir C besser, da ich mit Linux von Anfang an mit C konfrontiert wurde. 3.) is ja logisch das ich meine Websites nicht von Hand bastele. 4.) C++ lerne ich als nächstes. Aber als fortgeschrittener Programmierer geht es nicht darum alle Sprachen die es gibt zu können. Da müsstest du mir zustimmen. 4.) Ich hab mal angefangen Java zu lernen, aber es sofort wieder aufgegeben, weil die sich so mit der OOP verguckt haben. 12V DC schrieb: > 1.)ich programmiere seit 3 Jahren nicht mehr VB. Gut für dich... > 2)Du hast natürlich Recht, das c++ seine Vorteile hat, aber zum Einstieg > war mir C besser, da ich mit Linux von Anfang an mit C konfrontiert > wurde. C++ geht auch unter Linux, und wenn man onehin richtig ("fortgeschritten") programmieren lernen will, kann(sollte) man auch gleich mit C++ verwenden, da man sonst alle schlechten C-Angewohnheiten wieder un-lernen muss... > 3.) is ja logisch das ich meine Websites nicht von Hand bastele. Aber HTML schreiben :D > 4.) C++ lerne ich als nächstes. Aber als fortgeschrittener > Programmierer geht es nicht darum alle Sprachen die es gibt zu können. > Da müsstest du mir zustimmen. Nicht alle, aber einige wichtige und grundverschiedene, wie eben z.B. Java, C++, Python. > 4.) Ich hab mal angefangen Java zu lernen, aber es sofort wieder > aufgegeben, weil die sich so mit der OOP verguckt haben. OOP zu verstehen und anzuwenden ist ja mal absolute Grundvorraussetzung um sich "fortgeschritten" nennen zu dürfen... Dass Java das so forciert ist gar nicht so schlecht um die Leute zu ihrem Glück zu zwingen. Kommt auf den Anwendungsbereich an. Für Mikrocontroller ist Java eher Blödsinn, wobei für Mathematische Berechnungen in Spiele wohl eher Java gut is. Ich bleibe jedenfalls bei meiner Behauptung. Jeder kann ja etwas anderes finden. Das bestimmte Grundlagen da sein müssen ist ja richtig. Teile davon habe ich mir jaschon angeeignet. 12V DC schrieb: > Meine letzte Frage in diesem Thread: > 12V DC schrieb: >> Wird der Systickhandler während des Interrupts ausgeführt? Kann, muss aber nicht. Ich würde erstmal davon ausgehen, dass er das nicht wird. Man kann Ihn aber so einstellen. Genaueres dazu findest du in der Doku von ARM zu den Cortex-M Kernen. 12V DC schrieb: > Kommt auf den Anwendungsbereich an. Für Mikrocontroller ist Java > eher > Blödsinn, wobei für Mathematische Berechnungen in Spiele wohl eher Java > gut is. Wieso das, da sind die Möglichkeiten doch äquivalent zu C/C++. Und gerade Spiele profitieren von der Performance von C++. Allerdings wird Java sehr viel verwendet, weswegen es wichtig ist es inkl. Vor & Nach-Teilen zu kennen. > Ich bleibe jedenfalls bei meiner Behauptung. Jeder kann ja etwas anderes > finden. Das bestimmte Grundlagen da sein müssen ist ja richtig. Teile > davon habe ich mir jaschon angeeignet. Deine Behauptung, dass du mit C und VB fortgeschrittener Programmierer bist? 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.
|
|