Compare Match Interrupt stm32

OP #2940600
Lesenswert?
• ▲
▼
Hallo Forum,

da meine Suche erfolglos geblieben ist und ich die nötige Information 
nicht aus den diversen Manuals herausfiltern kann meine Frage:

Wie muss ich einen Timmer auf einer stm32f30x einstellen, um einen 
Interrupt bei CompareMatch zu bekommen?

Ich benutzte das DiscoveryF3 Board und hangele mich durch die 
zugehörigen Beispiele der standard Peripheral Library und versuche Stück 
für Stück dinge zu kombinieren.
Im Moment eben das blinken einer LED in der ISR zu realisieren. Durch 
pures Delay und pollen des Timerstandes habe ich es hinbekommen.

Mit folgenden Inits tut sich zwar was, aber es ist ganz sicher kein 
Compare Match, da der Wert den ich TIM_PULSE schreibe keinen Einfluss 
hat. Überhaupt ist es kein Unterschied, ob ich den dazugehörigen Block 
auskommentiere oder nicht:
1
  /* TIM3 clock enable */
2
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
3

4
  /* Enable the TIM3 gloabal Interrupt */
5
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
6
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
7
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
8
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
9
  NVIC_Init(&NVIC_InitStructure);
10
  
11
  /* Time base configuration */
12
  TIM_TimeBaseStructure.TIM_Period = 65535;
13
  TIM_TimeBaseStructure.TIM_Prescaler = 50;
14
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
15
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
16
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
17
 
18

19
  /* Output Compare Timing Mode configuration: Channel1 */
20
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
21
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
22
  TIM_OCInitStructure.TIM_Pulse = 15000;
23
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
24

25
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);
26

27
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);
28
  TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
29
  TIM_Cmd(TIM3, ENABLE);

und die ISR
1
void TIM3_IRQHandler(void)
2
{
3
  
4
  tmp++;
5
//   if(tmp == 10)
6
//   {
7
//     GPIOE->BSRR = BSRR_VAL1;
8
//   }
9
//   if(tmp == 100)
10
//   {
11
//     GPIOE->BSRR = BSRR_VAL2;
12
//     GPIOE->BRR = BSRR_VAL1;
13
//     tmp = 0;
14
//   }
15
  if(tmp == 10)
16
  {
17
    GPIOE->BSRR = BSRR_VAL1;
18
  }
19
  if(tmp == 20)
20
  {
21
    GPIOE->BRR = BSRR_VAL1;
22
    tmp = 0;
23
  }
24
  TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
25
}

Sieht jemand den Fehler?

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.