stm32f030F4P6 Timer wollen nicht

OP #4366142
Lesenswert?
• ▲
▼
Hallo Leute,

wie der Titel schon vermuten lässt, mögen mich meine Timer nicht.
Ich habe aktuell Tim16 als IRQ Timer laufen, was tadellos funktioniert.
Tim3 läuft als PWM Timer und generiert mir wunderbar auf channel 1-3 
meine PWM Signale.

Nun würde ich aber gerne anstatt Tim3 channel 1-3 Tim1 channel 2,3 und 
Tim15 channel1 nutzen, da ich Tim3 freischaufeln muss für Spi.
Gesagt getan. Ich dachte aufgabe von nicht mal 5min dan läuft das ganze 
aber denkste...

Ich habe mir Tim3 kopiert und alle Werte auf Tim1 channel2 angepasst, 
aber da kommt einfach nichts an Pa8.

anbei mein Code:
1
//Tim3 PWM
2

3
  //Takt für Timer 3 einschalten
4
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
5
  //Timer 3 konfigurieren
6
  TIM_TimeBase_InitStructure.TIM_ClockDivision  = TIM_CKD_DIV1;
7
  TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
8
  TIM_TimeBase_InitStructure.TIM_Period = 99;        
9
  TIM_TimeBase_InitStructure.TIM_Prescaler = 7;          
10
  TIM_TimeBase_InitStructure.TIM_RepetitionCounter = 0;
11

12
  TIM_TimeBaseInit(TIM3, &TIM_TimeBase_InitStructure);
13

14
  //PWM konfigurieren
15
  TIM_OCInitTypeDef outputChannelInit;
16

17
  outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
18
  outputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
19
  outputChannelInit.TIM_OutputNState = TIM_OutputNState_Enable;
20
  outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High;
21
  outputChannelInit.TIM_OCPolarity = TIM_OCNPolarity_High;
22
  outputChannelInit.TIM_OCIdleState = TIM_OCIdleState_Reset;
23
  outputChannelInit.TIM_OCNIdleState = TIM_OCNIdleState_Set;
24
  outputChannelInit.TIM_Pulse = 80;                  //80Pulse von 100 high
25

26
  //PWM Channel 1
27
  TIM_OC1Init(TIM3, &outputChannelInit);
28
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
29

30
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);
31

32
  //PWM Channel 2
33
  TIM_OC2Init(TIM3, &outputChannelInit);
34
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
35

36
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_1);
37

38
  //PWM Channel 4
39
  TIM_OC4Init(TIM3, &outputChannelInit);
40
  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
41

42
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_1);
43

44
  // Timer3 einschalten
45
  TIM_Cmd(TIM3, ENABLE);
46
  /* TIM3 Main Output Enable */
47
  TIM_CtrlPWMOutputs(TIM3, ENABLE);
48

49

50

51
  //Tim1 PWM
52

53
  //Takt für Timer 1 einschalten
54
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
55
  //Timer 1 konfigurieren
56
  TIM_TimeBase_InitStructure.TIM_ClockDivision  = TIM_CKD_DIV1;
57
  TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
58
  TIM_TimeBase_InitStructure.TIM_Period = 99;
59
  TIM_TimeBase_InitStructure.TIM_Prescaler = 7;
60
  TIM_TimeBase_InitStructure.TIM_RepetitionCounter = 0;
61

62
  TIM_TimeBaseInit(TIM1, &TIM_TimeBase_InitStructure);
63

64
  //PWM konfigurieren
65

66
  outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
67
  outputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
68
  outputChannelInit.TIM_OutputNState = TIM_OutputNState_Enable;
69
  outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High;
70
  outputChannelInit.TIM_OCPolarity = TIM_OCNPolarity_High;
71
  outputChannelInit.TIM_OCIdleState = TIM_OCIdleState_Reset;
72
  outputChannelInit.TIM_OCNIdleState = TIM_OCNIdleState_Set;
73
  outputChannelInit.TIM_Pulse = 80;                  //80Pulse von 100 high
74

75
  //PWM Channel 2
76
  TIM_OC2Init(TIM1, &outputChannelInit);
77
  TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
78

79
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);
80

81

82
  // Timer1 einschalten
83
  TIM_Cmd(TIM1, ENABLE);
84
  /* TIM1 Main Output Enable */
85
  TIM_CtrlPWMOutputs(TIM1, ENABLE);

Natürlich sind die Pins Pa6, Pa7, Pa8, Pb1 entsprechend konfiguriert.

Vielen Dank für eure Hilfe und Vorschläge.

Steph

edit: sehe grad hab ja tim3 channel 1,2,4 verwendet aber das sollte 
keinen Unterschied machen. Die gehen ja.

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.