STM32F103xx PWM Problem

Gast #2582914
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
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
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
@vaid
Ich habe leider kein Oszilloskop, deshalb kann ich es nur sehen.
Die LED funktioniert aber wenn Ich PB13 als normalen Ausgang 
konfigurieren dann klappt das ein- und ausschalten der LED.
Gast
Gast
Habe es mittlerweile geschaft.
Das Problem war period und pulse müssen natürlich auch passend zur 
MC-Frequenz berechnet werden.

period = (SystemCoreClock / 20000 ) - 1;

Danke für die Tipps.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.