Forum: Mikrocontroller und Digitale Elektronik stm32f030F4P6 Timer wollen nicht


von Steph M. (stephh)


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.

von hp-freund (Gast)


Lesenswert?

stm32f030F4P6 in SSOP20?

Das sehe ich weder PA8 noch TIM15.

von hp-freund (Gast)


Lesenswert?

Sorry TSSOP20.

von Steph M. (stephh)


Lesenswert?

hp-freund schrieb:
> stm32f030F4P6 in SSOP20?
>
> Das sehe ich weder PA8 noch TIM15.

Vielen Dank. Das hätt ich wohl nie bemerkt. Richtig geschaut (Tim1 
Channel2 ist PA9) den gibts auch aber dann mit PA8 versucht zu machen. 
Danke auch für den Hinweis mit TIM15.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.