Forum: Mikrocontroller und Digitale Elektronik SysTick_Config() STM32F4


von 12V DC (Gast)


Lesenswert?

Wieso deaktiviert die Funktion
1
SysTick_Config(SystemCoreClock/100);
 den blauen Taster auf dem stm32f4-discoveryboard?

von Manax (Gast)


Lesenswert?

macht der über den timer die entprellung ?

von 12V DC (Gast)


Lesenswert?

Hä?

von Tobi D. (fanti)


Lesenswert?

Das Problem konnte ich reproduzieren.
Du musst noch den Systick_handler programmieren, dann funktioniert es, 
zumindest bei mir:
void SysTick_Handler(void){}

von Hugo (Gast)


Lesenswert?

12V DC schrieb:
> den blauen Taster auf dem stm32f4-discoveryboard?

Drück einfach den Reset-Taster, dann blinkt es auch.

von 12V DC (Gast)


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.

von Paul (Gast)


Lesenswert?

12V DC schrieb:
> Hä?

Was meinst Du mit Hä?

von Deutschlehrer (Gast)


Lesenswert?

Man sagt ja immer, es gäbe keine dummen Fragen. Aber manchmal bin ich 
mir da nicht sicher.

von 12V DC (Gast)


Lesenswert?

Das Hä bezog sich auf die Antwort von Manax, die ich 0 verstanden habe.

von Wolfgang R. (eg61ejub)


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

von 12V DC (Gast)


Lesenswert?

Ach so ist das, aber warum sollte der Taster dann garnicht funzen?

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Uwe B. (derexponent)


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

: Bearbeitet durch User
von Sepp (Gast)


Lesenswert?

Uwe hat Recht!

von 12V DC (Gast)


Lesenswert?

Vielen dank ich probier's mal

von Tobi D. (fanti)


Lesenswert?

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
^^

von 12V DC (Gast)


Lesenswert?

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.

von Maxx (Gast)


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.

von Uwe B. (derexponent)


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

von 12V DC (Gast)


Lesenswert?

Im ARM programmieren kenne ich mich nooch nicht sehr gut aus, aber 
allgemein würde ich mich als Fortgeschritten einstufen(C, VB, HTML)

von 12V DC (Gast)


Lesenswert?

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).

von gggast (Gast)


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.

von Uwe B. (derexponent)


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

von gggast (Gast)


Lesenswert?

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 ?

von Kindergärtner (Gast)


Lesenswert?

12V DC schrieb:
> aber allgemein würde ich mich als Fortgeschritten einstufen(C, VB, HTML)
Wenn das Fortgeschritten ist, was ist dann Anfänger?

von 12V DC (Gast)


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?

von Matthias L. (Gast)


Lesenswert?

>mystm.de

oder

www.mystm.de


gibt es nicht. Kannst Du mal bitte einen kompletten Links posten?

von Uwe B. (derexponent)


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 !

: Bearbeitet durch User
von 12V DC (Gast)


Lesenswert?

@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?

von Kindergärtner (Gast)


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.

von 12V DC (Gast)


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.

von Kindergärtner (Gast)


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.

von 12V DC (Gast)


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.

von Kindergärtner (Gast)


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.

von 12V DC (Gast)


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.

von Maxx (Gast)


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.

von 12V DC (Gast)


Lesenswert?

Vielen Dank

von Kindergärtner (Gast)


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?

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.