Output Compare für STM32

Gast #3629257
Lesenswert?

Hallo Leute, Ich brauche für dem STM32F2 eine Funktion mit der ich den 
Timer einstellen kann also von der Form :
void setTimer(int Value) , je nach Value läuft der Timer entsprechend 
schneller oder langsamer. Ich könnte jedes mal den Timer neu 
initallisieren um das gewünschte Ergebnis zu erhalten aber ich glaube 
das wäre ziemlich Aufwändig da die Funktion oft aufgerufen wird.
Ich wollte nun mit OutputCompare arbeiten und den Compare-Wert 
dementsprechend in der Funktion setTimer() anpassen.
1
void initTimer3(void)
2
{
3
    unsigned int t1=8000;
4
  
5
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
6
    NVIC_InitTypeDef NVIC_InitStructure;
7
    TIM_OCInitTypeDef TIM_OCInitStructure;
8
    
9
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);     
10

11
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;            
12
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
13
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
14
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            
15
  NVIC_Init(&NVIC_InitStructure);                            
16

17

18
  TIM_TimeBaseStructure.TIM_Prescaler = 5000;                 
19
  TIM_TimeBaseStructure.TIM_Period = 10000;                   
20
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     
21
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
22
  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
23
  TIM_Cmd(TIM3, ENABLE);                                     
24

25
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;    
26
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   
27
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
28
  TIM_OCInitStructure.TIM_Pulse = 1000;
29
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);
30
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
31

32
  TIM_ITConfig(TIM3,TIM_IT_CC1, ENABLE);              
33

34
  
35
  TIM_SetCompare1(TIM3, t1);
36
  //Oder :   TIM3->CCR1 = 8000;
37

38
  
39
}

Das Problem ist, egal wie ich TIM_SetCompare1 einstelle, der Interrupt 
wird alle 500 µs ausgelöst. Ich hoffe ihr könnt mir sagen was daran 
falsch ist.
Gast #3629276
Lesenswert?

Naja, egal wann der Interrupt im Zyklus ausgelöst wird: Der Zyklus ist 
immer genau gleich lang.

Geändert werden muß für die Zykluslänge  TIM3->ARR , mir fällt nur 
momentan der CMSIS-Befehl dazu nicht ein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren