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

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