mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32f103 Timer


Autor: tse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade den TIM2 des STM32f103 als Timebase laufen zu 
lassen. (Der Systick geht ohne Probleme es wird jedoch eine 2. 
unabhängige Timebase benötigt).

Ich verwende die STD-Lib von ST
Zu erst wird RCC auf 24Mhz initialisiert (SysCLK HCLK und PCLK2)
und auch für TIM2 Enabled.
Diese Werte kann ich auch per RCC_GetClocksFreq() bestätigen.
als nächstes initialisiere ich den Timer:
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_TimeBaseStructInit(TIM_TimeBaseStructInit);
  TIM_TimeBaseStructure.TIM_Period = 50;
  TIM_TimeBaseStructure.TIM_Prescaler = 8;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  /* TIM IT enable */
  TIM_ITConfig(TIM2, TIM_IT_CC1 , ENABLE);
  
  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);
  
  
  
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* Enable the TIM2 gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel =  TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  
  NVIC_Init(&NVIC_InitStructure);

Im TIM2_IRQHandler lass ich nun nen Pin Toggeln.
Das Problem ist, das zwar der Interrupt angesprungen wird, jedoch:
1. Die Frequenz nicht passt und auch komische Werte annimmt wenn man an 
Prescaler und Period dreht (Periode um Faktor 10 größer erzeugte 
Frequenz nur Faktor 4 größer)
2. Es keine Auswirkungen zeigt wenn ich an der ClockDivision dreh

Ich hoffe ihr könnt mir weiterhelfen

Mfg
TSE

Autor: tse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.gidf.de -.-
https://my.st.com/public/STe2ecommunities/mcu/List...

Fehler:
Falscher Interrupt
NVIC_init zu spät
das obligatorische -1 beim Berechnen der reload Werte vergessen

Änderungen an ClockDivison zeigen immer noch keine Wirkung.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Obacht, die Taktversorgung der Timer ist etwas subtil. Das ist nicht 
einfach der entsprechende PCLK.

> Periode um Faktor 10 größer erzeugte Frequenz nur Faktor 4 größer

Eigentlich sollte mit der Periode die Frequenz sinken, nicht steigen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ist denn dein "TIM2_IRQChannel" ? Sollte das nicht "TIM2_IRQn" sein?
warum ist  NVIC_Init zu spät? Ich konfiguiere auch immer erst den Timer 
und dann den NVIC -> funktioniert - warum auch nicht?

Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.