Forum: Mikrocontroller und Digitale Elektronik SysTick_Handler richtig konfigurieren?!


von STM32er (Gast)


Lesenswert?

Nabend liebe Leutz,

Ich bin gerade am verzweifeln. Entweder rechne ich gerade mega Mist oder 
die Tolereanz vom µC ist mega groß.

Möchte den SysTick Handler jede Millisekunde auslösen lassen.
Habe einen STM32 mit 48MHz.

48.000.000 / 1000 = 48.000
1
SysTick_Config(48000);
2
3
if(Application.Ms >= 500)
4
{
5
   Application.Ms = 0;
6
   Encoder_Out(1,0);
7
}
8
else
9
Encoder_Out(0,0);
10
11
Application.Ms++;

Mache ich was falsch???

von ui (Gast)


Lesenswert?

STM32er schrieb:
> Mache ich was falsch???

Wahrscheinlich, sonst würds ja gehen.

STM32er schrieb:
> if(Application.Ms >= 500)
> {
>    Application.Ms = 0;
>    Encoder_Out(1,0);
> }
> else
> Encoder_Out(0,0);

Es würde schonmal helfen den GANZEN Code zu posten. Ansonsten fehlt 
mindestens ne while(1) Schleife.

STM32er schrieb:
> Application.Ms++;

und was soll der Scheiß? Ich schätze du willst millisekunden damit 
zählen? Und wo steht der Code?

STM32er schrieb:
> Möchte den SysTick Handler jede Millisekunde auslösen lassen.
> Habe einen STM32 mit 48MHz.

Auch den Clockpfad richtig konfiguriert?

von STM32er (Gast)


Lesenswert?

1
int main(void)
2
{
3
    SystemInit();
4
    SystemCoreClockUpdate();
5
6
    /*
7
    *   SysClk_Periode = 48.000.000 / 10000 = 4800
8
    *   4800 = 1[ms]
9
    */
10
    SysTick_Config(SystemCoreClock / 1000);
11
12
  while(1)
13
  {
14
    IWDG_ReloadCounter();
15
  }
16
}
1
void SysTick_Handler(void)
2
{
3
    Application.Ms++;
4
}

von ui (Gast)


Lesenswert?

und woher willst du jetzt wissen, dass die Zeiten nicht passen?

von Stm32er (Gast)


Lesenswert?

Habe es am blinken einer LED gesehen. Ca. 500ms sollte man schon 
ungefähr einschätzen können, das sah aber mehr so aus wie 1 Sekunde bis 
1,5 Sekunden.

von ui (Gast)


Lesenswert?

Stm32er schrieb:
> Habe es am blinken einer LED gesehen. Ca. 500ms sollte man schon
> ungefähr einschätzen können, das sah aber mehr so aus wie 1 Sekunde bis
> 1,5 Sekunden.

"Sau aus wie"... Hört sich ja genau an...
Welches Board nutzt du? Nutzt du nen Jlink -> dann kannst mit dem 
SystemViewer schauen wie die Zeiten so sind. Ansonsten mit irgend nem 
billigen LogicAnalyzer. Oder die Zeitdifferenz nach oben schrauben (so 
ca. 60sekunden) und mitstoppen.

von W.S. (Gast)


Lesenswert?

STM32er schrieb:
> Ich bin gerade am verzweifeln.

Ja, das glaube ich dir.

Also mal ganz ernst: Was willst du eigentlich mit dem SysTick, wenn du 
dort lediglich sowas drin hast:

void SysTick_Handler(void)
{
    Application.Ms++;
}

Normalerweise macht man mit dem SysTick eine controllerinterne Uhr auf, 
die irgendwelche sinnvollen Dinge erledigt. Ja, ggf. gehört ein 
Multitasking auch dazu, sofern man mit RTOS arbeitet.

Aber sowas? Was verbirgt sich denn hinter "Application.Ms++" ? Ist das 
das Lesen und Setzen einer Eigenschaft? Womöglich über entsprechende 
Methoden, sprich Getter&Setter, die einen unbekannten Inhalt nebst 
unbekannter Latenz haben?

Wer soll dir bittesehr bei sowas einen Rat geben? Ein Gleiches gilt für
SysTick_Config(48000);
was eigentlich für einen 48 MHz Chip völlig OK aussieht - aber keiner 
deiner Leser kennt den Inhalt dieser ominösen Funktion.

Also, bei mir läuft die interne Systemuhr per SysTick auf allen Systemen 
völlig richtig, ohne Fehlgang, ohne Aussetzer und das über Monate 
hinweg. Also liegt der Fehler garantiert nicht an deinen Chips...

W.S.

von WSKäse (Gast)


Lesenswert?

W.S. schrieb:
> aber keiner
> deiner Leser kennt den Inhalt dieser ominösen Funktion.

Rede keine Käse, das ist der übliche Aufruf den die standard
STM-Libraries mitbringen. Wenn du das nicht kennst gilt das
noch lange nicht für andere.

von holger (Gast)


Lesenswert?

>das sah aber mehr so aus wie 1 Sekunde bis
>1,5 Sekunden.

Dann liegt die Vermutung nahe dass deine CPU nicht mit 48MHz läuft.
Und dann liegt es vermutlich da dran:

>Auch den Clockpfad richtig konfiguriert?

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.