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

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.