Timer als Capture/Compare

OP #2874837
Lesenswert?
• ▲
▼
Hi,

ich beschäftige mich auf dem STM32F4 Discovery BoardSTM32 mit den 
Timern, eine recht umfangreiche Geschichte - es gibt auch einige 
Beispiele dafür nur hänge ich irgendwie an einem simplen Problem fest. 
Ich würde gern beim erreichen des capture/compare Wertes togglen. Als 
erstes habe ich es mit dem overflow flag probiert, was auch 
funktioniert.
Für mein Verständnis müsste ich das CC1F Bit im SR behandeln um den 
Ausgang beim Erreichen des im CCR1 hinterlegtem Wert schalten zu lassen, 
was allerdings so nicht funktioniert.

1
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
2
TIM_OCInitTypeDef  TIM_OCInitStructure;
3
GPIO_InitTypeDef GPIO_InitStructure;
4
I2C_InitTypeDef  I2C_InitStruct;
5
NVIC_InitTypeDef NVIC_InitStructure;
6

7
void TIM_Config(void);
8

9
int main(void)  {
10
  TIM_Config();
11

12

13
  while (1) {
14
/*
15
  if (TIM_GetFlagStatus(TIM3, TIM_FLAG_Update) != RESET) {          // (SR-UIE Bit) toggle auf ARR-Wert funktioniert
16
    TIM_ClearFlag(TIM3, TIM_IT_Update);
17
    GPIO_ToggleBits(GPIOC, GPIO_Pin_6);
18
    } 
19
*/
20
  if (TIM_GetFlagStatus(TIM3, TIM_FLAG_CC1) != RESET) {              // SR-CC1IF Bit ??
21
    TIM_ClearFlag(TIM3, TIM_FLAG_CC1);
22
    GPIO_ToggleBits(GPIOC, GPIO_Pin_6);
23
    }  
24
  }
25
}
26

27
void TIM_Config() {
28
/************************* GPIO-TIM Configuration ***************************/
29
   // clocks enable
30
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);            // TIM3
31
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);            // GPIOC
32
   
33
  // GPIOC Configuration: TIM3 CH1 (PC6)
34
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
35
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
36
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
37
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
38
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
39
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
40
    
41
/********************************** TIM *************************************/
42
  // Timer basic configuration
43
  TIM_TimeBaseStructure.TIM_Prescaler = 3;
44
  TIM_TimeBaseStructure.TIM_Period =0xFFFF;                        // ARR Value
45
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
46
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
47

48
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
49

50
  // Output Compare
51
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active;
52
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
53
  TIM_OCInitStructure.TIM_Pulse = 20999;                            //CCR1 Value
54
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
55
  
56
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);                          // Channel1
57
  
58
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);
59

60
  // TIM enable counter
61
  TIM_Cmd(TIM3, ENABLE);
62
  
63
}

Wäre jemand so freundlich mich auf meinem Fehler hinzuweisen.
Danke!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.