STM32F103xx PWM Problem

Gast #2582914
Lesenswert?

Hallo,
Ich versuche am Pin PB13 ein PWM auszugeben um damit eine LED dimmen zu 
können. Leider gelingt es mir nicht den PWM zu aktivieren.
Weiß jemand, wo mein Fehler liegt?
1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
2

3
GPIO_StructInit(&GPIO_InitStructure); // Reset init structure
4
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13;
5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          
7
GPIO_Init(GPIOB, &GPIO_InitStructure);
8

9
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
10
TIM_TimeBaseStructInit( &TIM_TimeBaseInitStruct ); 
11
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV4;
12
TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1;
13
TIM_TimeBaseInitStruct.TIM_Prescaler = 240 - 1;
14
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;  
15
TIM_TimeBaseInit( TIM1, &TIM_TimeBaseInitStruct );
16
  
17

18
TIM_OCInitTypeDef TIM_OCInitStruct;
19
TIM_OCStructInit( &TIM_OCInitStruct );
20
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
21
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
22
TIM_OCInitStruct.TIM_Pulse = 400; // duty cycle equals 0=0% 1000=100%
23
TIM_OC2Init( TIM1, &TIM_OCInitStruct );
24
TIM_Cmd( TIM1, ENABLE );
Gast #2582928
Lesenswert?

MC123 schrieb im Beitrag #2582914:
> TIM_OC2Init( TIM1, &TIM_OCInitStruct );

PB13 ist aber OC1Init

Außerdem:

MC123 schrieb im Beitrag #2582914:
> TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;

weiss es nicht ganz genau, kann aber sein, dass er dann nur ein mal 
durchläuft. Das würde ich erst mal auskommentieren
Gast #2582969
Lesenswert?

MC123 schrieb im Beitrag #2582941:
> es läuft leider aber trotzdem noch nicht

Hast du das gemessen oder nur "gesehen"?!


Hier mal Initcode mit dem der Timer4 bei mir initialisiert wird:
1
void TIM4_Configuration(void)
2
{
3
    TIM_OCInitTypeDef  TIM_OCInitStructure;
4
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
5
  /* TIM1 Peripheral Configuration --------------------------------------------*/
6
  /* Time Base configuration */
7
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
8
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
9
  TIM_TimeBaseStructure.TIM_Period = MAX_PWM;
10
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
11

12
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
13

14
  /* Channel 3 Configuration in PWM mode */
15
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
16
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
17
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
18
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
19
  TIM_OC3Init(TIM4, &TIM_OCInitStructure);
20

21
  /* Channel 1 Configuration in PWM mode */
22
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
23
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
24
  TIM_OCInitStructure.TIM_Pulse = 10;
25
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
26
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
27
  TIM_OC1Init(TIM4, &TIM_OCInitStructure);
28

29
  TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
30
  TIM_ARRPreloadConfig(TIM4,ENABLE);
31

32
  /* TIM1 Update DMA Request enable */
33
  TIM_DMACmd(TIM4, TIM_DMA_Update, ENABLE);
34

35
  /* TIM1 counter enable */
36
  TIM_Cmd(TIM4, ENABLE);
37
}
Gast #2585972
Lesenswert?

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