SysTick_Handler richtig konfigurieren?!

Gast #4883835
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???
Gast #4883846
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?
Gast #4883847
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
}
Gast #4883861
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.
Gast #4883906
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.
Gast #4883918
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.