Forum: Mikrocontroller und Digitale Elektronik STM32f103 Timer


von tse (Gast)


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

von tse (Gast)


Lesenswert?

http://www.gidf.de -.-
https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/DispForm.aspx?ID=3241

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.

von (prx) A. K. (prx)


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.

von Michael (Gast)


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

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.