SysTick_Config() STM32F4

Gast #3416662
Lesenswert?

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.
#3417601
Lesenswert?

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
#3418329
Lesenswert?

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.
#3418416
Lesenswert?

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 :
1
SysTick_Config(SystemCoreClock/100);

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 :
1
void SysTick_Handler(void)
2
{
3
  
4
}

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
Gast #3421729
Lesenswert?

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.
#3421731
Lesenswert?

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
Gast #3423051
Lesenswert?

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.
#3423070
Lesenswert?

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 :
1
SysTick_Config(SystemCoreClock/100);



aber Punkt 2 fehlt :
1
void SysTick_Handler(void)
2
{
3
  // nothing to do
4
}


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
Gast #3424291
Lesenswert?

@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?
#3424399
Lesenswert?

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 !
Gast #3424462
Lesenswert?

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.
Gast #3424699
Lesenswert?

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.
Gast #3424934
Lesenswert?

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.
Gast #3425415
Lesenswert?

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.
Gast #3425604
Lesenswert?

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.
Gast #3428576
Lesenswert?

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.
Gast #3428592
Lesenswert?

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.
Gast #3429122
Lesenswert?

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?

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