STM32f103 Timer

Gast #1762619
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:
1
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
2
  TIM_TimeBaseStructInit(TIM_TimeBaseStructInit);
3
  TIM_TimeBaseStructure.TIM_Period = 50;
4
  TIM_TimeBaseStructure.TIM_Prescaler = 8;
5
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
6
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
7
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
8

9
  /* TIM IT enable */
10
  TIM_ITConfig(TIM2, TIM_IT_CC1 , ENABLE);
11
  
12
  /* TIM2 enable counter */
13
  TIM_Cmd(TIM2, ENABLE);
14
  
15
  
16
  
17
  NVIC_InitTypeDef NVIC_InitStructure;
18
  
19
  /* Enable the TIM2 gloabal Interrupt */
20
  NVIC_InitStructure.NVIC_IRQChannel =  TIM2_IRQChannel;
21
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
22
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
23
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
24
  
25
  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
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.